Array.sort возвращает только 0 значений.Массив правильного размера и массив полностью заполнен - PullRequest
0 голосов
/ 13 февраля 2019

Извините за еще одну из этих тем, но читал, что там, и ничего не ответило на мой вопрос.У меня есть некоторый очень простой код, который принимает только 5 значений, сортирует их, выполняет математические расчеты с 3 средними и, наконец, что-то выводит.Не сложно, но по какой-то причине мой Array.sort возвращает только значение 0. Я почти уверен, что все точки в массиве заполнены перед сортировкой, и что мой массив имеет правильный размер.Предложения?

import java.util.*;
import java.util.Arrays;

    public class practice {

        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner scanner = new Scanner(System.in);
            int[] finals = new int[3];
            int[] scores = new int[5];
            int difficulty = 0;
            for (int x = 0; x < 3; x++) {
                System.out.println("Please input the scores for diver " + (x + 1));

                for (int y = 0; y < 5; y++) {
                    scores[x] = scanner.nextInt();
                    System.out.println(scores[x]);
                }
                Arrays.sort(scores);
                for (int j = 0; j < 5; j++) {
                    System.out.println(scores[x]);
                }
                System.out.println("Please input the difficult of diver " + (x + 1));
                difficulty = scanner.nextInt();
                finals[x] = (((scores[1] * scores[2] * scores[3]) / 3) * difficulty);
                System.out.println(finals[x]);
            }
            winner(finals);

        }

        public static void winner(int[] finals) {
            System.out.println(finals[0]);
            if (finals[0] > finals[2] && finals[0] > finals[1]) {
                System.out.println("Diver 1 is the winner of the olympics with a score of " + finals[0]);
            } else if (finals[1] > finals[2] && finals[1] > finals[0]) {
                System.out.println("Diver 2 is the winner of the olympics with a score of " + finals[1]);
            } else if (finals[2] > finals[0] && finals[2] > finals[1]) {
                System.out.println("Diver 3 is the winner of the olympics with a score of " + finals[2]);
            } else {
                System.out.println("There was a tie");
            }
        }

    }

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Ваша проблема в два раза.

В вашем цикле for

for (int y = 0; y < 5; y++) {
     scores[x] = scanner.nextInt();
     System.out.println(scores[x]);
}

вы продолжаете добавлять свой счет к тому же месту (в данном случае 0) в массиве показателей.Если в коде есть x, это должно быть y, чтобы иметь возможность добавить все 5 баллов в ваш массив следующим образом:

for (int y = 0; y < 5; y++) {
    scores[y] = scanner.nextInt();
    System.out.println(scores[y]);
}

Вы допустили ту же ошибку, печатая свои баллы в этом коде,где вы снова печатаете только x, который находится в вашем внешнем цикле и в этот момент все тот же (в данном случае 0):

for (int j = 0; j < 5; j++) {
    System.out.println(scores[x]);
}

Ваш код должен выглядеть следующим образом:

for (int j = 0; j < 5; j++) {
    System.out.println(scores[j]);
}

Это означает, что вы затем переберите все 5 баллов в вашем массиве.

Все остальное выглядит хорошо и будет работать нормально.

Хотя в ограничениях этих двух циклов лучше всего использовать scores.length вместо 5.

0 голосов
/ 13 февраля 2019

Это,

for (int y = 0; y < 5; y++) {
    scores[x] = scanner.nextInt();
    System.out.println(scores[x]);
}

должно быть

for (int y = 0; y < scores.length; y++) {
    scores[y] = scanner.nextInt();
    System.out.println(scores[y]);
}

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

for (int j = 0; j < 5; j++) {
    System.out.println(scores[x]);
}

должно быть

for (int j = 0; j < scores.length; j++) {
    System.out.println(scores[j]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...