如何在Java中使用多个不同类型的扫描仪?

时间:2018-11-16 09:58:26

标签: java input

我有以下Java代码(在默认的Eclipse控制台上执行):

String name = "";
    System.out.printf("Name of the Story Arc:  ");

    if(in.hasNext()) {
        name = in.nextLine();
    }

    int l = 0;
    System.out.printf("Length of the Story Arc:  ");
    if(in.hasNextInt()) {
        l = in.nextInt();
    }

    StoryArc a = new StoryArc(name, id, issues_nb + 1, l);
    story_arcs.add(a);

我试图连续多次执行它,但是它的行为很奇怪: 第一次执行可以正常工作,询问名称,然后询问长度。第二次执行时,它询问名称,但不询问长度(设置为0)。第三个执行会询问长度,但将名称设置为“”,它会像这样循环,在偶数执行中使用长度,在奇数执行中使用名称。

这是我使用Java编写的第一个程序,所以我想我对扫描仪不了解,但是经过长时间的研究我仍然无法弄清,所以请帮忙。

修改: 谢谢你们!在您的帮助下,我们设法使其成功!

3 个答案:

答案 0 :(得分:0)

DateTime date = new DateTime.now(); Future<Null> selectDate(BuildContext context) async { final Datetime picked = await showDatePicker( context: context, initialDate: date, firstDate: new DateTime(2010), lastDate: null); if (picked != null && picked != date) { print('date selected: ${date.toString()}'); setState(() { date = picked; }); } } 仅会获取整数,但并不表示您已经完成输入该行,因此您必须告诉扫描仪您自己。有两种方法可以做到这一点:

您可以执行l = in.nextInt()来表示我们已经完成了包含整数的行:

in.nextLine();更改为:

l = in.nextInt();

Try it online.

或者,您可以将l = in.nextInt(); if(in.hasNext()){ // Ignore the rest of the line that contained the length integer-input: in.nextLine(); } 用于所有输入,然后将String自己转换为整数:

in.nextLine()更改为:

l = in.nextInt();

Try it online.

答案 1 :(得分:0)

您需要进行while循环才能获得有效的name,并且
您需要一个while的{​​{1}}循环来获取try/catch,因为用户可以输入无效值而不是有效整数:

l

答案 2 :(得分:0)

尝试一下。您的代码没有问题,但是可以运行之后可能会帮到您

import java.util.*;

public class Answer {


    public static void main(String[] args) {

        String name = "";
        System.out.printf("Name of the Story Arc:  ");
        Scanner in = new Scanner(System.in);
        if(in.hasNext()) {
            name = in.nextLine();
        }

        int l = 0;
        System.out.printf("Length of the Story Arc:  ");
        if(in.hasNextInt()) {
            l = in.nextInt();
        }

        System.out.println("Name of the Story Arc: "+name);
        System.out.println("Length of the Story Arc:  "+l);


    }

}