2011-11-23 249 views
1

我有兩個類。我希望下面的類中for循環的代碼運行兩次,但是當我發送int i = 0和條件爲i < 2時,它似乎只運行一次。正如你所看到的,我必須將它設置爲i < 3才能讓它運行兩次。Java - for循環問題

import java.util.Scanner; 

public class LPrint {  
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 

     System.out.println("sender: "); 

     String a = input.next(); 

     System.out.println("recepiant: "); 

     String b = input.next(); 

     Letter one = new Letter(a, b); 

     System.out.println("letter: "); 

     for (int i = 0; i < 3; i++) { 
      one.body = one.body.concat(input.nextLine() + "\n"); 
     } 

     System.out.print(one.getLetter()); 
    } 
} 

在其他類中,String body = "",並且僅在String result = ("to " + recepiant + ":\n").concat(body + "\n").concat("regards,\n").concat(sender);

+1

你應該測試你的循環運行次數的假設......這是很好的調試練習。在循環體中插入一個System.out.println(「Looping ...」)並查看它打印多少次... – Bryan

回答

8

使用我認爲你的問題來自讀取包含只有通過循環的第一次迭代新線的不必要的字符串。我猜你的輸入看起來像這樣(用空格或foo和酒吧之間的換行符):

foo bar 
baz 
qux 

後的頭兩個讀取掃描儀只會令牌bar之後,但在新行之前定位跟着它。撥打nextLine將讀取第一行行的其餘部分(即新行字符)。它不會按照您的意圖閱讀第二行。當你讀三行你得到這些字符串:

"\n" 
"baz\n" 
"qux\n" 

爲了解決您可以使用的readLine代替read閱讀前兩個代幣的問題,否則你可以只是你的循環前添加一個額外的調用readLine並丟棄當前行中的所有剩餘字符,包括新行字符。

看到這個code on ideone更清楚地表明問題。