2017-09-04 8 views
0

ユーザー入力に基づいて配列を設定しようとしていますが、主な問題があります。ここに私のコードは次のとおりです。Java配列の繰り返し

Scanner myScanner = new Scanner(new BufferedInputStream(System.in)); 
    System.out.println("Please enter your text"); 
    ArrayList myArray = new ArrayList(); 
    while (myScanner.hasNext()){ 
    myArray.add(myScanner.nextLine()); 

     for (int i = 0; i <myArray.size() ; i++) { 
      System.out.println(myArray.get(i)); 
     } 

    } 

私は

a 
    b 
    c 

を挿入すると、私はちょうど

a 
    a 
    b 

を得るまた、私のアレイを印刷するためのより良い方法はありますか?

編集:私はこの

while (myScanner.hasNext()){ 
     myArray.add(myScanner.nextLine()); 
     break; 
    } 
    for (int i = 0; i <myArray.size() ; i++) { 
     System.out.println(myArray.get(i)); 
    } 

のように私のコードを変更

私はちょうど、結果としてaを取得します。

答えて

2

スキャナから次の行を取得するたびに、配列サイズが1増加します。アルファベットを入力すると、a,b,c,d,e...というようになります。

すべての入力後、forループは配列全体を出力します。したがって、最初にアレイにはaが、2回目にはa,bになります。あなたが行った場合、あなたの出力はa,a,b,a,b,c,a,b,c,d...の形式で続きます。 whileループの状態がmyScanner.hasNext()になるのを待っていたため、まだa,b,cが出力されていなかったのです。

ご希望の場合は、お気軽にご相談ください。

+0

forループをwhileループの外側に移動すると、意図した結果が得られることに言及していませんでしたが、他の回答ではこれまでに対処しています。 – Timtech

3

whileループを実行するたびにアレイ全体が印刷されています。 whileループの最初の反復では、forループがaを出力し、2回目がwhileループになり、forループがa(再び)とbのループを出力します。

は、以下のように予想される出力を得るために whileループの外 forループを移動し

:あなたはmyarrayの何度も何度ものArrayListのすべての値を印刷しようとしているので、

while (myScanner.hasNext()){ 
    myArray.add(myScanner.nextLine()); 

} // end of while 

for (int i = 0; i <myArray.size() ; i++) { 
    System.out.println(myArray.get(i)); 
} 
+0

私はここに書き込む前にこれを試しましたが、私は返品を得ることができません。それはそこにくっついている。 whileループで 'break;'を追加しましたが、私には配列としての最初の行が渡されます。 –

+0

@MuharremYelmerあなたの答えで述べたように、whileループは常にmyScannerを待っています。hasNext() '条件。ブレークを追加すると、最初の繰り返しの後で単純に中断され、これまでの入力を出力します。 – Timtech

+0

@Timtech休憩時間を追加しようとしましたが、他の2つのエントリを取得するにはどうすればいいですか? –

0

重複が発生しました。したがって、ユーザーがAを入力すると、myArrayはAを格納し、forループはAを出力し、次の行では、ユーザーがB、myArray = A、Bを入力するとforループがAとBを出力します。 forループをwhileループの外側に置いて、ユーザーのすべての入力を取得し、ユーザーがすべての入力を終了させ、ユーザーが終了するためにタイプ 'Q'のようなループから抜け出す方法が必要です。

0

他の人が最初の質問に答えてくれましたので、私は2番目に答えます:客観的には、より良い方法でArrayListを印刷することはできません。しかし、ここであなたのループにもっと簡潔に相当します:

myArray.forEach(System.out::println);