簡體   English   中英

無法將輸入存儲在數組中

[英]Having trouble storing input in array

我目前正在學習如何使用數組 ,但我的其中一個數組存儲輸入時遇到了一些麻煩。

我試圖創建兩個嵌套的for循環 ,在每個輸入之后來回循環 ,但是其中一個循環正在掃描但不存儲輸入,但我需要將其存儲到第二個數組中。

我對嵌套for循環的邏輯的理解不是最好的,因此我認為這與此有關。

任何幫助將不勝感激。

我的源代碼:

import java.util.Scanner;
import java.util.Arrays; 

public class PlayerRoster {

  public static void inputStats(Scanner scan) {
    int [] number = new int [5];
    int [] rating = new int [5]; 
    int jerseyNumber = 1; 

    for(int i = 0; i < number.length; i++){
    System.out.printf("Enter player %d's jersey number\n", jerseyNumber);  
      number[i] = scan.nextInt();


      for(int j = 0; j < 1; j++){
      System.out.printf("Enter players %d's rating\n", jerseyNumber);
      rating[j] = scan.nextInt(); 
      jerseyNumber++; 
    }
  }
    System.out.println(Arrays.toString(number)); 
    System.out.println(Arrays.toString(rating));
  }




  public static void main(String[] args) {
    Scanner scan = new Scanner(System.in); 
    inputStats(scan); 





    return;
  }
}

由於數組的長度相同,因此不需要第二個循環。

兩個陣列的1個循環就足夠了。 像這樣:

import java.util.Scanner;
import java.util.Arrays; 

public class PlayerRoster {

  public static void inputStats(Scanner scan) {
    int [] number = new int [5];
    int [] rating = new int [5];  

    for(int i = 0; i < number.length; i++){
    System.out.printf("Enter player %d's jersey number\n", i+1);  
      number[i] = scan.nextInt();



      System.out.printf("Enter players %d's rating\n", i+1);
      rating[i] = scan.nextInt(); 


  }
    System.out.println(Arrays.toString(number)); 
    System.out.println(Arrays.toString(rating));
  }

您也不需要jerseyNumber var,因為它什么也不做。

我猜你期望這樣的輸出

[1,3,5,2,6]  // number
[3,4,3,5,4]  // rating

只需將您的inputStats替換為此

public static void inputStats(Scanner scan) {
    int [] number = new int [5];
    int [] rating = new int [5]; 

    for(int i = 0; i < number.length; i++){
      System.out.printf("Enter player %d's jersey number\n", i+1);  
      number[i] = scan.nextInt();
      rating[i] = scan.nextInt(); // changed Line. 
  }
    System.out.println(Arrays.toString(number)); 
    System.out.println(Arrays.toString(rating));
}

變化:

1.替換這個

System.out.printf("Enter player %d's jersey number\n", jerseyNumber);  

System.out.printf("Enter player %d's jersey number\n", i+1);  

原因:這不是必需的,但是為什么要使用額外的變量。

2.替換此代碼

for(int j = 0; j < 1; j++){
      System.out.printf("Enter players %d's rating\n", jerseyNumber);
      rating[j] = scan.nextInt(); 
      jerseyNumber++; 
    }

  rating[i] = scan.nextInt(); 

原因: for循環每次執行時都只是替換等級的索引0

好吧,我不認為你有什么不好,除了一個事實,即內環(第2環for聲明)是不必要的,因為你正在閱讀的唯一一個每個球員的評價。

所以你可以直接寫

System.out.printf("Enter players %d's rating\n", jerseyNumber);
rating[i] = scan.nextInt(); 

而不將其置於for循環中。

認識到我是如何使用i而不是j作為索引變量的,因為i保持玩家的數量j只是一次循環輸入等級的變量。 由於第二個循環位於第一個循環內部,因此每次執行外部循環(由i計數)時,都會發生一次(由j計數)。

現在,因為您已將j用作評分數組的索引,所以每個玩家的評分輸入都將覆蓋第一個玩家的評分,即,評分數組中的第一個元素,但不將其存儲在i計數的下一個索引中。

因此,您的完整代碼將是:

import java.util.Scanner;
import java.util.Arrays; 

public class PlayerRoster {

  public static void inputStats(Scanner scan) {
    int [] number = new int [5];
    int [] rating = new int [5]; 
    int jerseyNumber = 1; 

    for(int i = 0; i < number.length; i++){
      System.out.printf("Enter player %d's jersey number\n", jerseyNumber);  
      number[i] = scan.nextInt();

      System.out.printf("Enter players %d's rating\n", jerseyNumber);
      rating[j] = scan.nextInt(); 

      jerseyNumber++; 
    }

    System.out.println(Arrays.toString(number)); 
    System.out.println(Arrays.toString(rating));
  }

  public static void main(String[] args) {
    Scanner scan = new Scanner(System.in); 
    inputStats(scan); 
    return;
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM