2016-10-27 55 views
0

我想輸出用戶輸入的號碼,但我得到一個錯誤。這裏是我的代碼:列印陣列用戶輸入

public static void main(String[] args) { 
    Scanner input=new Scanner(System.in); 
    int size=0,score=0; 
    int [] a=new int[size]; 
    int len=a.length; 
    do 
    { 
     System.out.print("Please enter a number between 1 to 5: "); 
     size=input.nextInt(); 
    } 
    while ((size<1) || (size>5)); 
    for (int i=1;i<=size;i++) 
    { 
     do 
     { 
      System.out.print("Enter your "+i+" score (1-100):"); 
      score=input.nextInt(); 
     } 
     while((score<1) || (score>100)); 
    } 
    for (int i=1;i<=size;i++) 
     System.out.println(a[i]+ " "); 
    } 
} 

這裏是我的輸出和錯誤: 請輸入數字1到5:2之間 輸入1分(1-100):54 輸入2的比分(1-100 ):64 異常在線程 「主要」 java.lang.ArrayIndexOutOfBoundsException:1 在Week08.BigArray2.main(BigArray2.java:27)

+0

您的for循環格式是錯誤的。Java中的數組從0開始並以length-1結尾,將for循環更改爲「for(int i = 0; i

+0

當您創建'a'數組時,'size'爲0,so該數組總是0個條目大。因此,當您嘗試將某些內容保存到數組中時,它會崩潰。在讀取大小後,將'a = new int [size]'移動到一行。 – Robert

+0

我現在明白這個問題。謝謝大家。 –

回答

1

有在代碼

  1. 陣列四個差錯初始化大小爲零
  2. 用戶輸入未存儲在數組
  3. 從索引1,但陣列迭代與0
  4. 掃描器開始沒有關閉

    Scanner input = new Scanner(System.in); 
    int size = 0, score = 0; 
    
    do { 
        System.out.print("Please enter a number between 1 to 5: "); 
        size = input.nextInt(); 
    } while ((size < 1) || (size > 5)); 
    
    int[] a = new int[size]; //1 
    
    for (int i = 0; i < size; i++) { 
        do { 
         System.out.print("Enter your " + (i + 1) + " score (1-100):"); 
         score = input.nextInt(); 
         a[i] = score; //2 
        } while ((score < 1) || (score > 100)); 
    } 
    
    for (int i = 0; i < size; i++) //3 
        System.out.print(a[i] + " "); 
    
    input.close(); //4 
    

輸出

Please enter a number between 1 to 5: 4 
Enter your 1 score (1-100):99 
Enter your 2 score (1-100):98 
Enter your 3 score (1-100):97 
Enter your 4 score (1-100):96 
99 98 97 96 
0

與您的代碼很少有問題:

  1. 以零大小聲明的數組。在java中,數組的大小在初始化時被聲明,並且可以在以後更改。
  2. 您從未將分數存儲到數組中。因此數組是空的。
  3. 在迭代數組時,始終在java中以零開始循環索引。

這是修改後的工作計劃:

進口java.util.Scanner的;

公共類ArrayPrint {

public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     int size = 0, score = 0; 
     int[] a; 

     do { 
      System.out.print("Please enter a number between 1 to 5: "); 
      size = input.nextInt(); 
     } while ((size < 1) || (size > 5)); 

     //Allocating space to array 
     a = new int[size]; 
     int len = a.length; 

     for (int i = 0; i <size; i++) { 
      do { 
       System.out.print("Enter your " + i + " score (1-100):"); 
       score = input.nextInt(); 
       a[i] = score; 
      } while ((score < 1) || (score > 100)); 
     } 
     for (int i = 0; i <size; i++) 
      System.out.println(a[i] + " "); 
    } 
} 

輸出

Please enter a number between 1 to 5: 2 
Enter your 0 score (1-100):22 
Enter your 1 score (1-100):11 
22 
11 
0

請看看此時你的代碼int [] a=new int[size];,大小= 0 4號線和已初始化的整數數組一個大小爲0的「a」,但是您最後試圖迭代數組「a」,代碼爲for (int i=1;i<=size;i++) System.out.println(a[i]+ " "); },這導致數組索引超出綁定異常。

移動下面的代碼行後首先做的,而環 - :

int[] a = new int[size]; 
    int len = a.length; 

現在糾正你的最後一個for循環如下─:

for (int i = 0; i < size; i++) 
     System.out.println(a[i] + " "); 
} 

數組的索引開始於和結束於大小-1