Java 不显示正确的分数

Java 不显示正确的分数,java,arrays,string,java.util.scanner,Java,Arrays,String,Java.util.scanner,在我的代码中,我有两个数组名和分数,两者的长度都是2 import java.util.Scanner; public class Test { private static Scanner key = new Scanner (System.in); public static void main (String [] args){ String [] name = new String [2]; int [] score = new

在我的代码中,我有两个数组名和分数,两者的长度都是2

import java.util.Scanner;

public class Test {

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

    public static void main (String [] args){

        String [] name = new String [2];
        int [] score = new int [2];

        readInfo(name, score);
        showInfo(name, score);


    }

    public static void readInfo (String [] name, int [] score){


        for (int i = 0; i < name.length; i++){

            System.out.print("Name no."+(i + 1)+": ");
            name [i] = key.next();

            for (int j = 0; j < score.length; j++){

                System.out.print("Score no."+(j + 1)+": ");
                score [j] = key.nextInt();


            }

            System.out.println("");

        }


    }


    public static void showInfo (String [] name, int [] score){

        System.out.println("Name\tScores\n");

        for (int i = 0; i < name.length; i++){

            System.out.print(name [i]);

            for (int j = 0; j < score.length; j++ )
                System.out.println("\t"+score [j]+"\t");


            System.out.println("");
        }

    }







}

这是我的问题,我如何解决它?

您有四个总分,并且一个数组只能容纳两个。运行readInfo时,第二个名字的分数将覆盖从第一个名字存储在那里的分数数组中的数据。您需要在数组中为所有分数留出足够的空间,或者选择不同的方式来存储此数据。

您可以这样修复它:

public class Test{

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

public static void main (String [] args){

    String [] name = new String [2];
    int [] score = new int [name.length*2];

    readInfo(name, score);
    showInfo(name, score);


}

public static void readInfo (String [] name, int [] score){


    for (int i = 0; i < name.length; i++){

        System.out.print("Name no."+(i + 1)+": ");
        name [i] = key.next();

        for (int j = i*2; j < name.length+i*2; j++){

            System.out.print("Score no."+(j + 1)+": ");
            score [j] = key.nextInt();


        }

        System.out.println("");

    }


}


public static void showInfo (String [] name, int [] score){

    System.out.println("Name\tScores\n");

    for (int i = 0; i < name.length; i++){

        System.out.print(name [i]);

        for (int j = i*2; j < name.length +i*2; j++ )
            System.out.println("\t"+score [j]+"\t");


        System.out.println("");
    }

}
}
for(int i = 0; i < names.length; i++) {
     ...
     for(int j = 0; j < score[0].length; j++) {
          score[i][j] // score referenced like this
     }
     ...
}
然后,在输入分数时,分数指数0和1需要用于人1,指数2和3需要用于人2,因此:

for (int j = i*2; j < name.length+i*2; j++){

        System.out.print("Score no."+(j + 1)+": ");
        score [j] = key.nextInt();


    }
for(int j=i*2;j

然后,在第二次迭代(与第二个名称有关)中,需要对read执行相同的操作,您将覆盖输入的第一组分数。您需要将分数数组设置为维度为2x2的二维数组

int[][] score = new int[2][2];
然后,在嵌套for循环中,参考分数如下所示:

public class Test{

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

public static void main (String [] args){

    String [] name = new String [2];
    int [] score = new int [name.length*2];

    readInfo(name, score);
    showInfo(name, score);


}

public static void readInfo (String [] name, int [] score){


    for (int i = 0; i < name.length; i++){

        System.out.print("Name no."+(i + 1)+": ");
        name [i] = key.next();

        for (int j = i*2; j < name.length+i*2; j++){

            System.out.print("Score no."+(j + 1)+": ");
            score [j] = key.nextInt();


        }

        System.out.println("");

    }


}


public static void showInfo (String [] name, int [] score){

    System.out.println("Name\tScores\n");

    for (int i = 0; i < name.length; i++){

        System.out.print(name [i]);

        for (int j = i*2; j < name.length +i*2; j++ )
            System.out.println("\t"+score [j]+"\t");


        System.out.println("");
    }

}
}
for(int i = 0; i < names.length; i++) {
     ...
     for(int j = 0; j < score[0].length; j++) {
          score[i][j] // score referenced like this
     }
     ...
}
for(int i=0;i

这样,每个名称有两个长度为2的独立数组。

int[]score=newint[2]为2代码< int >代码> s创建空间,但是你有4个分数。如果分数数组长度为3,如果你需要一个可变长度的容器来保存你的分数,考虑一个数组,你可以附加任何数量的分数,如果你知道分数数组需要长度为三,那么你可以改变数组的维数。int[][]分数=新的int[i][j],其中i是姓名数,j是分数数。如果分数的数量是可变的,你需要看看Matt Solarz提到的ArrayList