2016-10-27 3 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までの数字を入力してください:あなたの1つのスコアを入力します2 (1-100):54 はあなたの2得点を入力します(1-100ここに私のコードです):64 例外スレッド "メイン" java.lang.ArrayIndexOutOfBoundsExceptionに:1 Week08.BigArray2.mainで (BigArray2.java:27)

+0

forループの形式が間違っています。Javaの配列は0から始まり長さ1で終了し、forループを "for(int i = 0; i

+0

'a'配列を作成すると' size'は0になります。配列は常に0エントリ大きいです。したがって、配列に何かを保存しようとするとクラッシュします。大きさを読んだら、 'a = new int [size]'を行に移動してください。 – Robert

+0

私は今問題を理解しています。みんなありがとう。 –

答えて

1

初期化してコード

  1. 配列の4つの間違いがあります。ゼロサイズで
  2. ユーザ入力がインデックス1が、配列から反復配列
  3. に格納されていないが閉じられていない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のあなたの第四行を見て、あなたは整数配列を初期化していてください。 "a"のサイズは0ですが、最後に配列で配列 "a"を反復しようとしています。コードの行以下

移動最初LOOP-んが後:below-として

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

そして今は、ループの最後を修正:配列のインデックスは、から始まり

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

と終了はサイズ-1で終了します。

関連する問題