簡體   English   中英

遍歷掃描儀輸入后無法打印行-Java

[英]Can't print line after looping through scanner input - Java

為什么不打印“完成”?

public class Main {


public static void main(String[] args) {

    Scanner s = new Scanner(System.in);

    while (s.hasNext()) {

        System.out.println(s.nextInt());

    }

    System.out.println("done");

}

}

它可以很好地打印輸入,但是不打印完成字。

如果我在控制台中輸入以空格分隔的整數,然后按Enter鍵,則進行編輯 ,它會將我輸入的所有整數打印在單獨的行上,但是在完成所有操作之后,它不會打印完成的單詞

編輯

這行得通...但是看起來不是很優雅

public class Main {


public static void main(String[] args) {

    Scanner s = new Scanner(System.in);

    int temp;

    while (s.hasNext()) {

        temp = s.nextInt();

        if (temp != -99) {
            System.out.println(temp);
        } else {
            break;
        }

    } 



    System.out.println("done");

}

}

您會看到,掃描程序阻塞了沒有字符的輸入流,而只是在等待更多。 要發信號通知流結束,必須發送“流結束”字符。 在Linux上是ctrl-d。

來自java.util.Scanner的文檔( http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html )。

Both hasNext 
and next methods may block waiting for further input. Whether a hasNext method 
blocks has no connection to whether or not its associated next method will block.

例如,從linux命令提示符

> javac Main.java
> java Main
> 810
810
> 22
22
> foo
java.util.InputMismatchException
> java Main
> 1
1
> ctrl-D
done

測試此問題的另一種方法是在程序中回顯一行或顯示一個文件:

> echo 2 | java Main
2
done

編輯:

鑒於以下評論中所述的預期結果; 嘗試以下操作,它將只讀一行。 解析出分隔的整數,每行一個回顯它們,然后打印完成。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;


/**
 *
 */
public class Main {


    public static void main(String[] args) throws IOException {

        String str = new BufferedReader(new InputStreamReader(System.in)).readLine();

        Scanner s = new Scanner(str);

        while (s.hasNext()) {

            System.out.println(s.nextInt());

        }

        System.out.println("done");

    }

}

編輯編輯:整理答案,並處理評論中的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM