2017-09-04 65 views
0

我想根據用戶輸入設置數組,但我有一個主要問題。這裏是我的代碼:Java Array Repetition

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,第二次會有a,b,依此類推。如果繼續,您的輸出將繼續以這種格式a,a,b,a,b,c,a,b,c,d...。你之所以沒有輸出a,b,c,是因爲它正在等待while循環的myScanner.hasNext()條件。

希望這可以幫助,請隨時要求澄清。

+0

我忘了提,移動for循環,而循環之外會給你預期的結果,但其他的答案,迄今爲止已涉及這一點。 – Timtech

3

每當您通過while循環時,您正在打印整個陣列。在while循環的第一次迭代中,for循環打印出a,第二次通過while循環,for循環打印出a(再次)和b

移動for環出了while循環得到儘可能低於預期的輸出:發生

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

的重複,因爲你正試圖MYARRAY一遍又一遍打印ArrayList中的所有值。因此,當用戶輸入A時,myArray將存儲A,然後for循環打印A,然後在下一行中,當用戶輸入B時,myArray = A,B,for循環打印A和B等等。將for循環放在while循環之外,它獲得用戶的所有輸入,讓用戶完成所有輸入,並且您必須讓用戶擺脫循環,如類型「Q」退出。

0

其他人已經回答了第一個問題,所以我會回答第二個問題:沒有客觀的「更好」的方式來打印ArrayList。但這裏有一個更簡潔等同於你的循環:

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