我有两节课。我希望下面类中的for循环中的代码运行两次,但是当我将int i = 0
和条件发送到i < 2
时,它似乎只运行一次。正如您所看到的,我必须将其设置为i < 3
以使其仅运行两次。
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);
答案 0 :(得分:8)
我认为您的问题来自于在循环的第一次迭代中读取仅包含新行的不需要的字符串。我猜你的输入看起来像这样(在foo和bar之间有空格或换行符):
foo bar
baz
qux
在前两次读取之后,扫描仪将位于令牌bar
之后但紧跟在其后的新行之前。对nextLine
的调用将读取第一个行的其余部分(即新行字符)。它没有按你的意图读取第二行。当你读三行时,你会得到这些字符串:
"\n"
"baz\n"
"qux\n"
要解决此问题,您可以使用readLine
代替read
来阅读前两个令牌,否则您可以在循环播放之前添加对readLine
的额外调用并丢弃当前行中的任何剩余字符,包括换行符。
请参阅此code on ideone,以更清楚地说明问题。