1. Java / Говнокод #22315

    −14

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    public static int[] mergeArrays(int[] a1, int[] a2) {
         int n = a1.length + a2.length;
         int[] arr = new int[n];
        for(int i =(n/2); i < n; i++){
            for(int j=0; j < (n/2);j++){
                arr[j] = a1[j];
            }
            arr[i] = a2[i];
        }
        Arrays.sort(arr);
        return arr;

    надо сложить два массива и отсортировать. написал такое govno. как сложить два массива? помогите, интернет ресурсы не доходят)

    Запостил: reznik, 12 Февраля 2017

    Комментарии (34) RSS

    • Не надо складывать два массива. Пустое это
      Ответить
    • > как сложить два массива
      Придётся стать царём - освоить архитектуру процессора, изучить божественную сишку, понять все оптимизации своего конпелятора...
      Ответить
    • int[] arr = ArrayUtils.addAll(a1, a2);

      Так не пробовал?
      Ответить
      • Если без апачей:
        int[] arr = new int[a1.length + a2.length];
        System.arraycopy(a1, 0, arr, 0, a1.length);
        System.arraycopy(a2, 0, arr, a1.length, a2.length);

        Сортировку описал ниже.
        Ответить
        • Кстати, раз уж знакома java.util.Arrays, то почему не посмотрел в сторону copyOf и copyOfRange?
          Ответить
        • спасибо, int[] arr = ArrayUtils.addAll(a1, a2); помогло.
          а здесь что значит 0-ли System.arraycopy(a1, 0, arr, 0, a1.length);
          System.arraycopy(a2, 0, arr, a1.length, a2.length);?
          Ответить
          • Синтаксис:
            public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

            Первые нули в обоих случаях - это стартовое значение для копирования (в данном случае 0-е индексы а1 и а2). arr, 0, a1.length - а тут 0 - это стартовый индекс arr. Во втором случае он равен a1.length, а второе - a2.length, что кагбэ намекает с какого и по какой индексы (второе НЕ включительно) нам вносить значения в новый массив.
            Ответить
          • Кстати, System.arraycopy работает примерно в 5-10 раз быстрее реализации на циклах (для жабы), проверяй.
            Ответить
            • @ArrayCopy
              Это же просто выделенная память, нельзя ее просто скопировать? CopyMemory, или что то аналогичное?
              Ответить
              • unsafe.copyMemory()
                Ответить
                • Кстати, а как в Java с анонимными функциями? Можно ли передавать куда-либо указатель на анонимную функцию?
                  Ответить
                  • В восьмой - можно. В седьмой и ниже - только костылём через реализацию интерфейса на лету...
                    Ответить
                    • А можно посмотреть пример для седьмой и ниже?
                      Ответить
                      • runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                // ...
                            }
                        });
                        Ну зато можно было 2-3 метода сразу передавать.
                        Ответить
                        • а если это консольное или веб приложение? ну или любое другое, где нет ui?
                          Ответить
                          • А при чём здесь ui? Это ж просто пример передачи лямбды.
                            Ответить
                    • в восьмой между тем ничего не изменилось, просто сахар для functional interface
                      Ответить
                    • И то там какие-то ограничения с доступом к переменным.
                      Ответить
              • vanished
                Ответить
                • Анонимус не забывает:

                  > Darkling только что #
                  > Yes'ли-бы. Пожалуй есть некоторые моменты из-за которых жаба мне не нравится...
                  Ответить
                  • Я, Darkling, находясь в здравом уме и твердой памяти, торжественно заявляю:

                    Ну спорол хуйню не разобравшись. Бывает.
                    Лучше спороть хуйню и разобраться, чем не знать вообще.
                    Ответить
    • int[] arr = ArrayUtils.addAll(a1, a2);
      Arrays.sort(arr);

      Дополнил.
      Ответить
    • govnokod.stackexchange.com
      Ответить
    • Зачем тебе 2 вложенных цикла?)

      Кстати, жаба-компилятор осилит это вынести?
      Ответить
    • Каково это - плюсовать самого себя?
      Ответить
    • ну смотри, есть два массива, берешь и складываешь
      function YaNeUmeuVBCL(ar1, ar2) {
        return ar1 + ar2;
      }
      Ответить
      • Да, в JS всё работает "из коробки". Замечательный язык!
        > [1,2,3] + [4,5,6]
        < "1,2,34,5,6"
        Ответить
        • Лолшто??

          [1,2,3].toString()
          "1,2,3"

          Почему без скобок?
          Ответить
        • Всему вас плюсовиков учить надо:
          > [1,2,3] +[,,] + [4,5,6]
          < "1,2,3,4,5,6"

          Это же элементарно
          Ответить
        • Я в детстве долго размышлял о том, является ли математика какой-то глобальной истиной или же она может зависить от культуры. Потом я узнал про языки с implicit type conversion (где, например, отношение равенства может быть не ассоциативно) и Гёделя
          Ответить

    Добавить комментарий