2017-04-18 7 views
1

このコードでは論理エラーが発生しています。私は、ユーザーから10のint入力を取得し、10より大きい任意の数を印刷する必要があります。唯一の問題は、配列の最後の数値が10より大きい場合、印刷されません。アレイで論理エラーが発生する

public class Bigger10 
    { 
     public static void main(String[] args) 
     { 
      System.out.println("Please enter 10 integer numbers"); 

      int[] num = new int[10]; 
      int count = 0; 
      int num1 = StdIn.readInt(); 

      while(count<9) 
      { 
       num[count] = num1; 
       count++; 
       num1 = StdIn.readInt(); 
      } 

      for(int i = 0;i<count;i++) 
      { 
       if(num[i]>10) 
       { 
        System.out.printf("%d ", num[i]); 
       }  
      } 
     } 
    } 
+3

これは、8番目のインデックス、つまり9番目の要素までしかチェックしていないからです。 – warl0ck

+0

'for(int i = 0; i Misys

答えて

4

定数に代えて、どのくらいの大きさであるかを伝えるために配列に依頼してください。9

修正は簡単です。ループ内ではなく、その長さに反復処理を行います。

while(count < num.length) { 

} 
+0

エラー:スレッド "main"の例外java.lang.ArrayIndexOutOfBoundsException:10.これは配列サイズよりも大きいことを意味します。 – Ngroenewold

1
 int num1 =0; 

     while(count<=9) 
     { 
      num1 = StdIn.readInt(); 
      num[count] = num1; 
      count++; 

     } 

countあなたは10個の値をスキャンする必要があるため、<=9でなければなりません。 <9の場合、9つの値しかスキャンしません。

num1 = StdIn.readInt();は、whileループの最初の文にする必要があります。最後に追加すると、追加の番号をスキャンしています。その数は配列に追加されません。なぜなら、ループ条件がfalseになる、つまりcountが10になるからです。最後の数値は配列に追加されないために出力されません。

関連する問題