没有显示正确的分数java

时间:2017-07-07 15:47:21

标签: java arrays string java.util.scanner

在我的代码中,我有2个数组名称和得分,两者的长度都是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("");
        }

    }







}

当我输入姓名和分数时,输出中只显示两个名字的第二个分数。

Name no.1: john
Score no.1: 17
Score no.2: 19

Name no.2: jack
Score no.1: 12
Score no.2: 18

Name    Scores

john    12  
        18  

jack    12  
        18  

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

3 个答案:

答案 0 :(得分:1)

对于第二次迭代 - 与第二个名称相关 - 您将覆盖输入的第一组分数。您需要将得分数组设为维数为2x2的二维数组。

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

然后,在嵌套的for循环中,参考分数如下:

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

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

答案 1 :(得分:0)

你有四个总分,一个只有两个的数组。当您运行readInfo时,第二个名称的分数将覆盖从第一个名称存储在其中的score数组中的数据。您需要在数组中为所有分数留出足够的空格,或者选择不同的方式来存储此数据。

答案 2 :(得分:0)

你可以这样解决:

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("");
    }

}
}

这里发生的事情是你有一个长度为2的名字数组,你想要每个2分。这意味着你的得分数组需要有一个名字长度* 2:

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

然后,在输入得分时,得分指数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();


    }

然后,读取

需要做同样的事情