在分离标记之前,我试图检查扫描仪是否有多个标记。我目前正在尝试使用扫描仪。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语句。如果我把它拿走!然后,即使输入是一行,这些行也会打印出来。他们似乎也打印后,下一个是我发现奇怪的。我将非常感谢您的帮助!
我不得不做一些修改,因为它不会编译。当我运行它时,它给了我你说你想要的:
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