2017-07-07 53 views
0

,我有2个阵列名称和评分和二者的长度是2不显示正确的比分的java在我的代码

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 

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

+1

'int [] score = new int [2];'为2'int's创建空间,但是您有4个分数。 –

回答

0

您有四个总分数和一个只有两个数组的数组。当您运行readInfo时,第二个名称的分数将覆盖从第一个名称存储在那里的scores数组中的数据。您需要在数组中有足够的空间来存储所有分数,或者选择不同的方式来存储这些数据。

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:

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


    } 

之后,同样的事情需要做的阅读

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 
    } 
    ... 
} 

这样,我们具有长度的两个对于每个名称的两个分开的阵列。

+0

如果分数数组长度为3,该怎么办? –

+0

如果您需要一个可变长度的容器来保存您的分数,请考虑一个ArrayList,您可以在其中添加任意数量的分数 –

+0

如果您确定分数数组需要长度为三,那么您可以更改阵列。 int [] [] score = new int [i] [j]其中i是名称的数量,j是分数的数量。如果分数的数量是可变的,那么您需要查看像Matt Solarz提到的ArrayList –