Java - for循环问题

min*_*ino 1 java for-loop class

我有两节课.我希望下面的类中的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());
    }
}
Run Code Online (Sandbox Code Playgroud)

在另一个类中,String body = ""它只用于String result = ("to " + recepiant + ":\n").concat(body + "\n").concat("regards,\n").concat(sender);

Mar*_*ers 8

我认为你的问题来自于通过循环读取第一次迭代时只包含新行的不需要的字符串.我猜你的输入看起来像这样(在foo和bar之间有空格或换行符):

foo bar
baz
qux
Run Code Online (Sandbox Code Playgroud)

在前两次读取之后,扫描仪将位于令牌之后bar但紧跟在它之后的新行之前.调用nextLine将读取第一行的其余部分(即新行字符).它没有按你的意图读取第二行.当你读三行时,你会得到这些字符串:

"\n"
"baz\n"
"qux\n"
Run Code Online (Sandbox Code Playgroud)

要解决此问题,您可以使用readLine而不是read读取前两个令牌,或者您可以readLine在循环之前添加额外的调用并丢弃当前行中的任何剩余字符,包括新行字符.

请参阅ideone上的代码,以更清楚地演示问题.