Почему массив дает неправильное значение при использовании двух классов? - PullRequest
2 голосов
/ 23 марта 2020

У меня есть этот код здесь.

public class ArrayChallenge {

private static Scanner kb = new Scanner(System.in);

public static void main(String[] args) {
    System.out.print("Number of integers: ");
    int num = kb.nextInt();

    int [] returnedArray = readIntegers(num);
    System.out.println("Ascending Order: " + printAsc(returnedArray));
}

public static int [] readIntegers(int count){
    int [] values = new int[count];
    for(int i=0; i<count; i++){
        System.out.print("Enter number: ");
        values[i] = kb.nextInt();
    }
    return values;
}

public static int [] printAsc(int [] theArray){
    Arrays.sort(theArray);
    return  theArray;
}

Код выше работает отлично. У меня есть только один класс, но несколько методов stati c, и во время вызова метода printAs c (returnArray) программа вернет набор массивов в формате, подобном .toString.

Я поднял этот код на следующий уровень, используя два класса и создав методы stati c для экземпляров методов. Однако, когда я печатаю массивы. Он печатает эти значения [I@643b1d11

Вот мой код ниже:

Основной класс

public class Main {

public static Scanner kb = new Scanner(System.in);

public static void main(String[] args) {
    System.out.print("Enter the number of elements: ");
    int num = kb.nextInt();

    int numArrays []  = new int[num];

    Minimum minimum = new Minimum();
    int [] returnedArrays = minimum.readIntegers(numArrays);
    int returnedMin = minimum.findMin(returnedArrays);

    System.out.println("Minimum Value: " + returnedMin);
    System.out.println("Ascending Arrays: " + minimum.arrayAsc(returnedArrays));
}

}

Минимальный класс

public class Minimum {

public int [] readIntegers(int [] numArrays){
    System.out.println("Enter " + numArrays.length + " integers:");
    for(int i=0; i< numArrays.length; i++){
        numArrays[i]=Main.kb.nextInt();
    }
    return numArrays;
}

public int findMin(int [] numArrays){
    int max = Integer.MAX_VALUE;
    for(int i=0;i<numArrays.length;i++){
        if(max>numArrays[i]){
            max = numArrays[i];
        }
    }
    return max;
}

public int [] arrayAsc(int [] numArrays){
    Arrays.sort(numArrays);
    return numArrays;
}

}

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

Ответы [ 2 ]

3 голосов
/ 23 марта 2020

То, как вы используете printAsc, вам нужно изменить его определение, чтобы оно возвращало строку.

public static String printAsc(int [] theArray){
    Arrays.sort(theArray);
    return  Arrays.toString(theArray);
}

Если вы не хотите изменять определение printAsc, вам нужно вызвать это следующим образом:

System.out.println("Ascending Order: " + Arrays.toString(printAsc(returnedArray)));
0 голосов
/ 23 марта 2020

Вы не можете просто напечатать массив и ожидать, что он будет считывать все значения. При печати Java преобразует значение в String. По умолчанию при работе с Objects, Java просто печатает имя класса Object и его значение Ha sh. Это то, что вы видите. Вы можете прочитать больше об этом здесь .

Если вы хотите разобрать массив в String, который содержит все члены массива, вы можете взглянуть на Arrays.toString метод (и как его использовать ).

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