Java,使用多个扫描仪对象而不是一个的优点

时间:2015-10-01 19:40:07

标签: java

使用多个Scanner对象从标准输入输入不同数据类型的优点是什么,只需使用一个Scanner对象即可完成。

例如:

public class Etc
{
    public static void main(String[] args)
    {
            String name;
            int y;
            Scanner inputString= new Scanner(System.in);
            Scanner inputint=new Scanner(System.in);
            name=inputString.nextLine();
            y=inputint.nextInt();
   }
}
import java.util.Scanner;
public class Etc
{
    public static void main(String[] args)
    {
            String name;
            int y;
            Scanner input= new Scanner(System.in);
            name=input.nextLine();
            y=input.nextInt();
    }
}

2 个答案:

答案 0 :(得分:0)

我会看到使用不同扫描程序对象的唯一优势是使用多个输入流时。

例如:

Scanner keyboard = new Scanner(System.in);
Scanner fileScan = new Scanner(myFile);

仅使用一个流时,请坚持使用Scanner个对象。

我个人认为最好的办法是将它定义为你班级的私人静态最终变量,并从头开始实现它。

以下是一个例子:

public class MyClass{
    private static final Scanner keyboard = new Scanner(System.in);

    public static void main (String[] args){ //blabla }

    // Random stuff
}

答案 1 :(得分:0)

如果你有类似的话:

y=input.nextInt();
name=input.nextLine();

然后Scanner#nextInt方法不会使用输入的 last newline 字符,因此在下一次调用{{3}时会消耗换行符 }} 这会使你的名字变成空白。

在你的例子中,你有nextLine,然后是nextInt,这就是你没有看到问题的原因。如果您反转它,您将看到问题。

我不确定这是否只是这样做的原因,但这可能是使用2个不同流的原因之一。

注意:在Scanner#nextLine或任何Scanner#nextLine方法(Scanner#nextFoo本身除外)之后使用nextLine时,您会遇到类似的行为。