2012-02-18 17 views
0

我正在嘗試使用掃描儀在輸入中輸入字符串。 但它問我更多預期的字符串:不應該與此代碼問5個字符串?掃描儀詢問預期的更多字符串

public void go() 
{ 
    Scanner sc=new Scanner(System.in); 
    ArrayList<String> list=new ArrayList<String>(); 
    String temp=new String(); 
    Integer i=new Integer(0); 
    while(sc.hasNextLine() && i<5) 
    { 
     temp=sc.nextLine(); 
     list.add(list.size(),temp); 
     i++; 
    } 
} 

如果我嘗試運行它,它會在控制檯停止輸入前問我6個字符串。 但是我在開始的時候是零,在變成5之前它會增加5次。 那麼當我5歲的時候,爲什麼它還會留在原地呢?

解決:兩種方法都解決了這個問題。

回答

1

如果i == 5仍然是sc.HasNextLine()被調用。修理:

while (i < 5 && sc.hasNextLine()) 

P.S.做int i = 0;

+0

這是怎麼修復的? – 2012-02-18 22:08:11

+0

@HovercraftFullOfEels如果我達到5,我會<5將是假的,並在調用sc.hasNextLine()之前結束while循環。已經有sc.hasNextLine在讀取時進行讀取。 – 2012-02-18 22:35:08

+0

這解決了這個問題。 – 2012-02-19 19:26:51

4

您對代碼的執行有誤解。 它會詢問你6個字符串,但是將5個添加到列表中。 它要求你多一個字符串的原因是,sc.hasNextLine()被執行,它的計算結果爲true,所以你看到控制檯正在等待你輸入一些內容,但是第二部分的循環條件出現了:i<5,這被評估爲false所以循環體被跳過,並且你的列表中有5個字符串。您可以通過在Eclipse或Netbeans或其他Java IDE中調試代碼來查看這些代碼。

只是爲了方便您簡化您的循環。從環路狀態中刪除sc.hasNextLine()

while(i < 5) 
{ 
    temp=sc.nextLine(); 
    list.add(list.size(),temp); 
    i++; 
} 
+0

有解決方案,1+。甚至更好:使用for循環。這就是他們的目的。 – 2012-02-18 22:11:28