Array.sort仅返回0个值。大小正确的数组和数组已满

时间:2019-02-13 04:23:47

标签: java arrays eclipse

很抱歉,这些线程中有另一个线程,但是正在阅读其中的内容,没有任何内容回答了我的问题。我有一些非常基本的代码,它们仅接受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 :(得分:1)

这个

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]);
}

答案 1 :(得分:0)

您的问题有两个方面。

在您的for循环中

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

您一直将分数添加到scores数组的相同空间(在本例中为0)。如果代码中有x,则应该将y的所有5个分数添加到数组中的方式应该是y,如下所示:

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。