当前位置: 首页 > 知识库问答 >
问题:

下一步扫描之前,如何检查扫描仪是否有输入

潘弘扬
2023-03-14

在分离标记之前,我试图检查扫描仪是否有多个标记。我目前正在尝试使用扫描仪。hasNext()(我的扫描仪的名字是sc)。如果用户输入“string int”,那么我不想打印“enter age”或“enter grade”

System.out.println("Enter name or command: ");
            name = sc.next();
            if(name.toLowerCase().equals("next")) {
                students.remove(0);
            }else if(name.toLowerCase().equals("end")) {
                running = false;
            }else {
//This is where it gets dicey
                if(!sc.hasNext())
                    System.out.println("Enter age: ");
                age = sc.nextInt();
                if(!sc.hasNext())
                    System.out.println("Enter grade: ");
                grade = sc.nextInt();

                if(first) {
                    students.add(new Student(name, age, grade));
                    first = false;
                }else {
                    addStudent(new Student(name, age, grade), students.get(students.size()-1));
                }
            }

目前,无论输入是什么,我的程序都会跳过if语句。如果我把它拿走!然后,即使输入是一行,这些行也会打印出来。他们似乎也打印后,下一个是我发现奇怪的。我将非常感谢您的帮助!

共有1个答案

葛景龙
2023-03-14

我不得不做一些修改,因为它不会编译。当我运行它时,它给了我你说你想要的:

C:\Users\..snip..\stackOverflow>java src\stackOverflowTest.java
Enter name or command:
Peter 78 34
addStudent(new Student(name, age, grade), students.get(students.size()-1));

然而,如果我只输入一个参数,它就会挂起(根据javaDoc:“这个方法可能会在等待输入扫描时阻塞。”):

C:\Users\..snip..\stackOverflow>java src\stackOverflowTest.java
Enter name or command:
hello

这是可编译的修改:

import java.util.Scanner;

public class StackOverflowTest {
  static String name;
  static int age;
  static int grade;
  static boolean first;
  static boolean running;

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter name or command: ");
      name = sc.next();
      if(name.toLowerCase().equals("next")) {
            System.out.println("students.remove(0);");
//          students.remove(0);
      }else if(name.toLowerCase().equals("end")) {
          running = false;
      }else {

//This is where it gets dicey
        if(!sc.hasNext())
            System.out.println("Enter age: ");
        age = sc.nextInt();
        if(!sc.hasNext())
            System.out.println("Enter grade: ");
        grade = sc.nextInt();

        if(first) {
            System.out.println("students.add(new Student(name, age, grade));");
//            students.add(new Student(name, age, grade));
            first = false;
        }else {
            System.out.println("addStudent(new Student(name, age, grade), students.get(students.size()-1));");
//            addStudent(new Student(name, age, grade), students.get(students.size()-1));
        }
      }
  }
}

如果你想让所有选项都保持打开状态,你可以这样做(注意这里没有异常处理):

import java.util.Scanner;

public class StackOverflowTest {
  static String name = "";
  static int age = -1;
  static int grade = -1;

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter name or command: ");


    String[] input = sc.nextLine().split(" ");
    switch (input.length) {
      case 3: grade = Integer.valueOf(input[2]);
              // fallthrough
      case 2: age = Integer.valueOf(input[1]);
              // fallthrough
      case 1: name = input[0];
    };

    if (name.isEmpty()) {
      System.out.println("Enter name: ");
      name = sc.next();
    }   

    if (age == -1) {
      System.out.println("Enter age: ");
      age = sc.nextInt();
    }   

    if (grade == -1) {
      System.out.println("Enter grade: ");
      grade = sc.nextInt();
    }
  }
}
 类似资料:
  • 我正在尝试创建一个简单的程序来验证用户的输入是否为正整数。但是,在使用Scanner.hasNextInt()方法时遇到了一个问题。如果输入包含一个整数,比如“5个6”,我的程序将把6读入为一个整数。但是,我希望这样的语句无效,并提示用户只需要输入一个整数值。因此程序将输出“请输入整数值:”。 这就是我的程序的样子: 编辑:我理解next()与nextLine()之间的区别。然而,我的问题是实际仅

  • 问题内容: 我搜索了类似的问题,但没有一个帮助。 考虑一个文件: 你好你好吗? 当时你在哪里? 我想在每行结束后进行一些操作。如果我使用它,则不会告诉我何时到达第一行的末尾。 我也看到了,但是它只会告诉我是否存在另一行。 问题答案: 考虑使用多个扫描仪,一个扫描仪获取每一行,另一扫描仪扫描每行。我唯一要说明的是,使用完内部扫描仪后,请务必确保将其关闭。实际上,使用完 所有 扫描仪后,您将需要关闭它

  • 对于作业,我必须编写以下代码: 当我尝试编译它时,它在命令提示符下给了我3个错误,说“无法解析符号,符号:类扫描仪,位置:类单词,扫描仪用户输入=新扫描仪(System.in)”。我不确定错误在哪里。我应该使用BufferedReader作为输入吗?

  • 问题内容: 我的Java作业有问题。我遇到了意外的异常,特别是: java.util.NoSuchElementException:找不到行 我正在使用,该程序不断读取任何内容,并重复“无效格式”异常文本。如果输入正确的值,则第一部分通过,然后该部分立即进入此异常。如果输入的值不正确,则它将开始循环异常。 这是我的代码: 问题答案: 您关闭了多个库,这些库关闭了底层库,因此另一个库将不再从同一库和

  • 问题内容: 使用Scanner类中的useDelimiter时遇到一些问题。 如果我有这个输入 美国广播公司 输出将是 AB 然后等到我键入另一个“-”以打印出最后一个字符 但是,如果我没有用户输入数据,而是将字符串插入到Scanner中,则代码将起作用。原因是什么?如何解决?我不想使用StringTokenzier 问题答案: 如果没有等待您输入另一个,则将错误地假定您已完成输入。 我的意思是,

  • 我做了一个程序,要求3个整数来输出三角形的类型。所有内容都成功运行和编译,但是,在要求用户查看是否要再次循环的部分,联机编译器会输出错误: 异常线程"main"java.util.NoSuchElement异常在java.util.Scanner.throwFor(Scanner.java:838)在java.util.Scanner.next(Scanner.java:1347)在Assignm