0

由于某种原因,我无法让它工作。我有一个读取交易的应用程序,当输入一个空行时,它需要打印出一些东西。

    int transationCount = 0;
    while(sc.hasNext())
    {
        String trans = sc.next();


            String mode = trans.substring(0, 1);
            Double amount = Double.valueOf(trans.substring(1));

            if(mode.equals("C"))
            {
                c.charge(amount);
                ps.println(c.getBalance());
                transationCount = transationCount + 1;
            }
            else if(mode.equals("P"))
            {
                c.pay(amount);
                ps.println(c.getBalance());
                transationCount = transationCount + 1;
            }
    }
    ps.println(c.getBalance());
    ps.println(transationCount);

我试过了

while(sc.hasNext() && !(sc.next().equals("")))

不工作。我也尝试在 while 循环中添加

else if (!(trans.equals("")) {break;}
4

3 回答 3

2

默认情况下,扫描仪将忽略空行,因为它不是有效的令牌。

您可以手动检查该行是否为空:

public static void main(String[] args) throws Exception {
    Scanner sc = new Scanner(System.in);

    while(true) {
        String line = sc.nextLine();
        if (line.isEmpty()) {
            System.out.println("Empty line entered");
        } else {
            System.out.println("received line: " + line);
            String[] tokens = line.split("\\s+");
            System.out.println("tokens: " + Arrays.toString(tokens));
        }
    }
}
于 2012-11-27T20:07:38.830 回答
1

您的 Scanner 使用默认分隔符(空格)来标记输入。这意味着标记是单词,无论它们在哪一行。

some

word

只返回两个令牌,完全一样

some word

您真正需要的是分别获取行,以便区分哪一行是空的,哪一行包含某些内容。为此,请使用新行作为分隔符:

Scanner.useDelimiter("\\n");

或者您也可以使用 BufferedReader,请参阅BufferedReader.readLine()

请注意,同一行上的两个单词现在将包含在同一trans字符串中。您可以使用 String.split 方法分别获取每个单词。

于 2012-11-27T20:25:33.503 回答
0

那么如果输入一个空行,我将如何逃避 while 循环呢?还有其他方法吗?– 信息日

您可以在您的上方/上方使用标签while loop,并在遇到 emptyLine 时将其打破

或者你可以使用

Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
 while(! line.isEmpty()){

} 

line.isEmpty()为空返回true ,因此进入while循环的条件将变为false,因为现在在while循环中我们有((true))等于(false),因此while循环不会执行。line

于 2017-08-14T06:21:03.157 回答