Почему массивы перезаписываются последним методом? - PullRequest
0 голосов
/ 22 июня 2019

Я сортирую массив в порядке возрастания и убывания. Я сделал два метода и вызвал их из основного. Методы прекрасно работают отдельно, но когда я вызываю их оба, похоже, что последний перезаписывает значения первого. Я знаю, что это должно быть легко, но я не понимаю, что происходит. Может ли кто-нибудь объяснить мне это?

import java.lang.reflect.Array;

public class Test {

    public static void main(String[] args) {
        int[] mayor, menor;
        int[] array1 = new int[] {5,3,10,8,27,4,1 }; 

        mayor= ordenMayor(array1);
        menor= ordenMenor(array1);

        for(int i=0; i<mayor.length ;i++) {
            System.out.print(" "+mayor[i]+" ");
        }

        System.out.println("");
        for(int i=0; i<menor.length ;i++) {
            System.out.print(" "+menor[i]+" ");
        }

        System.out.println("");
        for(int i=0; i<array1.length ;i++) {
            System.out.print(" "+array1[i]+" ");
        }


    }


    public static int[] ordenMayor(int[] arrayM) {
        int[] arrayMayor=arrayM;
        int mayor;
        int index;

        for(int i=0; i<arrayMayor.length - 1;i++) {
        mayor=arrayMayor[i];
        index=i;
            for(int j=i; j<arrayMayor.length ;j++) {
                if(arrayMayor[j]>mayor) {
                    mayor=arrayMayor[j];
                    index=j;    
                }
            }
            arrayMayor[index]=arrayMayor[i];
            arrayMayor[i]=mayor;
        }
        return arrayMayor;
    }

    public static int[] ordenMenor(int[] arraym) {
        int[] arrayMenor=arraym;
        int menor;
        int index;

        for(int i=0; i<arrayMenor.length - 1;i++) {

        menor=arrayMenor[i];
        index=i;
            for(int j=i; j<arrayMenor.length ;j++) {
                if(arrayMenor[j]<menor) {
                    menor=arrayMenor[j];
                    index=j;    
                }
            }
            arrayMenor[index]=arrayMenor[i];
            arrayMenor[i]=menor;
        }
        return arrayMenor;
    }


}

первый должен быть убывающим, второй - восходящим (справа), а последний должен быть массивом не отсортированным.

1  3  4  5  8  10  27 
1  3  4  5  8  10  27 
1  3  4  5  8  10  27

Ответы [ 2 ]

5 голосов
/ 22 июня 2019

Проблема в ваших orderMayor и orderMenor методах.Я расскажу о orderMayor здесь, поскольку у них обоих одинаковые проблемы.

В частности, строка

int[] arrayMayor = arrayM;

переназначает arrayMayor в качестве ссылки на arrayM,Обратите внимание!Я сказал "ссылка".Это происходит потому, что это присваивание фактически не копирует содержимое массива (более технически, оно только копирует адрес массива Object).

Вам нужно будет клонировать массив, а затем работать с ним, например:

int[] arrayMayor = arrayM.clone();

Это создает поверхностную копию массива и присваивает его arrayMayor, поэтому при работе с массивом он не переопределяет старый.

0 голосов
/ 22 июня 2019

Reference To Array

Это изображение показывает четкую картину происходящего. он просто делает поверхностную копию или ссылается на тот же массив, array1.it вызывается по ссылке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...