Сортировать массивы

66
12 ноября 2021, 00:10

Нужно создать метод, который объединяет буквы или числа из двух массивов в один.
Например есть два массива - a и b, которые должны быть записаны в один массив следующим образом - [a[0],b[0],a[1],b[1] и т.д.]

Второй метод должен делать тоже самое, только в метод добавляется переменная n, если переменная n = 2, то метод сортирует след образом - [a[0],a[1],b[0],b[1] и т.д.]

Проблема: метод просто выкидывает числа или иногда пустые места в массиве:

public static char [] smesch(char []i, char []q){
        String s = "";
        for(int k = 0; k < Math.min(i.length, q.length); k++){
            s += i[k] + q[k];
        }
        if(i.length < q.length){
            for(int k = i.length; k < q.length; k++){
                s += q[k];
            }
        }
        else{
            for(int k = q.length; k < i.length; k++){
                s += i[k];
            }
        }
        return s.toCharArray();
    }
Answer 1

Зачем столько циклов? Все проще...

public class Test {
    public static void main(String[] args) {
        char[] x = {'1','3','5'};
        char[] y = {'2','4','6','7'};
        System.out.println(smesch(x, y));
    }
    public static char[] smesch(char[] arr1, char[] arr2) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < Math.max(arr1.length, arr2.length); i++) {
            if (arr1.length>i) sb.append(arr1[i]);
            if (arr2.length>i) sb.append(arr2[i]);
        }
        return sb.toString().toCharArray();
    }
}

Вывод : 1234567

Второй случай сложнее, я бы использовал в такой задаче итераторы. Выглядить это будет примерно так:

public static void main(String[] args) {
    Character[] x = {'1','3','5'};
    Character[] y = {'2','4','6','7'};
    System.out.println(smesch(x, y, 1));
    System.out.println(smesch(x, y, 2));
}
public static char[] smesch(Character[] arr1, Character[] arr2) {
    return smesch(arr1, arr2, 1);
}
public static char[] smesch(Character[] arr1, Character[] arr2, int n) {
    StringBuilder sb = new StringBuilder();
    Iterator<Character> iterator1 = Arrays.asList(arr1).iterator();
    Iterator<Character> iterator2 = Arrays.asList(arr2).iterator();
    boolean isFirstIterator = false;
    for (int i = 0; i < arr1.length + arr2.length; i++) {            
        if (i % n == 0) isFirstIterator = !isFirstIterator;            
        if (isFirstIterator && iterator1.hasNext()) sb.append(iterator1.next());
        else if (iterator2.hasNext()) sb.append(iterator2.next());
    }
    return sb.toString().toCharArray();
}

Из примитивных чаров я сделал ссылочные, потому как у массива итератора нет и нужно перекинуть его в лист. Для массива примитивных чаров эта задача таким способом не решается. Если там нужен принципиально именно массив примитивов, то способ конвертировать найдете в инете. В идеале, разумеется, прокинуть в метод коллекцию вроде листа, чтобы не выполнять преобразования совсем (если это допустимо для вас)

READ ALSO
Как прикреплять к каждому пользователю в MySQL одну таблицу с правом ее изменять

Как прикреплять к каждому пользователю в MySQL одну таблицу с правом ее изменять

Хочу чтобы на каждого User в MySql создавался table с названием user'а Например создаю пользователя с именем John даю ему право Insert и Update для таблицы...

89
Как SQL запросом получить данные из текста?

Как SQL запросом получить данные из текста?

У меня в SQL таблице лежит значение в текстовом формате:

114
Как реализовать смещение колонок на flex?

Как реализовать смещение колонок на flex?

Подскажите, пожалуйста, как реализовать это посредством css flexboxОба блока max-width: 30em

138
Растянуть блок на всю высоту экрана (body)

Растянуть блок на всю высоту экрана (body)

Не могу растянуть контейнер на всю высоту body

216