Java Array.sort仅返回0个值。阵列大小正确,且阵列已完全填充

Java Array.sort仅返回0个值。阵列大小正确,且阵列已完全填充,java,arrays,eclipse,Java,Arrays,Eclipse,很抱歉又出现了一条这样的帖子,但我正在通读外面的内容,什么也没有回答我的问题。我有一些非常基本的代码,只需要输入5个值,对它们进行排序,然后用中间的3个值进行计算,最后输出一些东西。不难,但出于某种原因,my Array.sort只返回值0。我非常确定数组中的所有点在排序之前都已填充,并且我的数组大小正确。建议 import java.util.*; import java.util.Arrays; public class practice { public sta

很抱歉又出现了一条这样的帖子,但我正在通读外面的内容,什么也没有回答我的问题。我有一些非常基本的代码,只需要输入5个值,对它们进行排序,然后用中间的3个值进行计算,最后输出一些东西。不难,但出于某种原因,my 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");
            }
        }

    }
import java.util.*;
导入java.util.array;
公共课堂实践{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
扫描仪=新的扫描仪(System.in);
int[]决赛=新int[3];
int[]分数=新的int[5];
智力难度=0;
对于(int x=0;x<3;x++){
System.out.println(“请输入潜水员的分数”+(x+1));
对于(int y=0;y<5;y++){
分数[x]=scanner.nextInt();
System.out.println(分数[x]);
}
数组。排序(分数);
对于(int j=0;j<5;j++){
System.out.println(分数[x]);
}
System.out.println(“请输入潜水员难度”+(x+1));
难度=scanner.nextInt();
期末考试[x]=((分数[1]*分数[2]*分数[3])/3)*难度);
System.out.println(期末[x]);
}
优胜者(决赛);
}
公开静态无效获胜者(int[]决赛){
System.out.println(期末[0]);
如果(决赛[0]>决赛[2]&决赛[0]>决赛[1]){
System.out.println(“跳水运动员1以“+决赛[0])的成绩获得奥运会冠军;
}else if(决赛[1]>决赛[2]&决赛[1]>决赛[0]){
System.out.println(“跳水运动员2以“+决赛[1])的成绩获得奥运会冠军;
}else if(决赛[2]>决赛[0]&决赛[2]>决赛[1]){
System.out.println(“跳水运动员3以“+决赛[2])的成绩获得奥运会冠军;
}否则{
System.out.println(“有一个平局”);
}
}
}
这个

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

for (int y = 0; y < scores.length; y++) {
    scores[y] = scanner.nextInt();
    System.out.println(scores[y]);
}
for (int j = 0; j < scores.length; j++) {
    System.out.println(scores[j]);
}
for(int y=0;y
不要依赖硬编码长度。并注意正在迭代的变量。你在这里犯了一个非常类似的错误

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

for (int y = 0; y < scores.length; y++) {
    scores[y] = scanner.nextInt();
    System.out.println(scores[y]);
}
for (int j = 0; j < scores.length; j++) {
    System.out.println(scores[j]);
}
for(int j=0;j
您的问题有两个方面

在您的for循环中

for (int y = 0; y < 5; y++) {
     scores[x] = scanner.nextInt();
     System.out.println(scores[x]);
}
for(int y=0;y<5;y++){
分数[x]=scanner.nextInt();
System.out.println(分数[x]);
}
您不断将分数添加到分数数组中的同一空格(在本例中为0)。如果代码中有x,则应为y,以便能够将所有5个分数添加到数组中,如下所示:

for (int y = 0; y < 5; y++) {
    scores[y] = scanner.nextInt();
    System.out.println(scores[y]);
}
for(int y=0;y<5;y++){
分数[y]=scanner.nextInt();
系统输出打印项次(分数[y]);
}
您在打印此代码中的分数时犯了相同的错误,您再次只打印x,这是来自外部循环的,此时仍然相同(在本例中仍然为0):

for(int j=0;j<5;j++){
System.out.println(分数[x]);
}
此处的代码应为:

for (int j = 0; j < 5; j++) {
    System.out.println(scores[j]);
}
for(int j=0;j<5;j++){
System.out.println(分数[j]);
}
这意味着您将循环遍历数组中的所有5个分数

其余的看起来都很好,运行良好


尽管在这两个循环的约束中使用score.length而不是5是最佳实践

问题在于行分数[x]=scanner.nextInt()。在将值读入数组时,是否应该使用“y”作为索引?此外,我建议您使用IDE调试器逐步检查代码并识别缺陷