2017-02-14 18 views
0

私は、ユーザー入力を介して値を文字列配列に入力しようとしています。後でこのクラスでもっとやっていきたいですが、配列がいっぱいになっていることを確認して印刷したいだけです。私は特定の値を満たすためにwhileループを使用していますが、ユーザーが0を入力して停止するのを待っていますが、配列のサイズやループの値に関係なく、ArrayIndexOutOfBoundsExceptionが発生します。 0を入力してもそれを停止しません。以下の完全なコード。文字列配列は常にスローArrayIndexOutOfBoundsException

また、例外はそれに関連付けられている私の配列のサイズを持っている(この場合、25)

ヘルプは非常に感謝、感謝することでしょう!

import java.util.Scanner; 

public class Dincision { 
static Scanner scanner = new Scanner(System.in); 

public static String entered; 
public static String[]foods; 

public static void main (String[]args){ 
    getChoices(); 
    int count=0; 
    for (count=0; count<=24; count++){ 
     System.out.println(foods[count]); 
    } 
} 

static public void getChoices() { 
    int i=0; 
    foods= new String[25]; 
    String input; 
    System.out.println("Enter an eating option."); 
    input=scanner.next(); 
    while (input != "0"){ 
     foods[i]=input; //error here// 
     i++; 
    } 
    System.out.println("That's all!"); 

} 
} 
+3

'while(input!= "0" && i <25){'。 –

+1

また、障害箇所にブレークポイントを追加してデバッグすることもできます。それが自分の学習方法です。 – JonyD

+4

コーヒーが必要ですが、['=='や '!='を使ってJavaの文字列を比較することはできません](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java ) – azurefrog

答えて

0

while文のループを配列のサイズに制限する必要があります。あなたは存在しない食べ物を手に入れようとします。

7

ここに2つの問題があります。まず、それはnot the correct way to compare Stringsです。代わりにwhile(!input.equals("0")を使用してください。

第2に、ループ内に新しいデータを取得していません。配列の境界を越えるまで、同じ入力値を何度も何度も繰り返し使用し続けます。ループを次のように変更します。

input=scanner.next(); 
while(!input.equals("0")){ 
    foods[i]=input; 
    i++; 
    input=scanner.next(); 
} 

ループ内で新しい入力を取得します。

また、安全のために、whileループに境界チェックを追加する必要があります。でそれを置くためにこれ以上のスペースがありません場合は、ループを停止

while(!input.equals("0") && i < foods.length){ 
+0

これは私のために働いた、ありがとう!私はかなり新しいことは言うまでもありません。私はあなたがそのようなスキャナで入力を2回読むことができないと思った...ありがとう。 – Jerevand

0

を、私はコメントすることはできませんので:。入力がNULLの場合、それは動作しますので、私は

!"0".equals(input) 

を好みます。