扫描仪使用Java从命令行获取数据时出现问题
我承认,这是学校的作业。。。但我根本不知道我做错了什么 我有一个带有插入函数的哈希表。下面的代码应该以“长字符串”(即“32452 John”)的格式从扫描仪使用Java从命令行获取数据时出现问题,java,java.util.scanner,Java,Java.util.scanner,我承认,这是学校的作业。。。但我根本不知道我做错了什么 我有一个带有插入函数的哈希表。下面的代码应该以“长字符串”(即“32452 John”)的格式从系统中获取一行数据。第一个标记必须是ID号的长标记,后面必须是名称的字符串标记。当我运行程序,到达必须执行的部分时(在开关语句中),我输入了“a”,然后按enter键。命令行立即读取“无效值”。(注意:不是值,因为这意味着它会命中嵌套的if语句。它不允许我键入任何数据。提前谢谢 System.out.println("Enter ID and N
系统中获取一行数据。第一个标记必须是ID号的长标记,后面必须是名称的字符串标记。当我运行程序,到达必须执行的部分时(在开关
语句中),我输入了“a”,然后按enter键。命令行立即读取“无效值”。(注意:不是值,因为这意味着它会命中嵌套的if语句。它不允许我键入任何数据。提前谢谢
System.out.println("Enter ID and Name.");
//temp to take in the next line entered by the user
//inScan is the Scanner for System.in
temp = inScan.nextLine();
//Create Scanner for the line
Scanner tempScan = new Scanner(temp);
if(tempScan.hasNextLong()){
thisID = tempScan.nextLong();
if((tempScan.hasNext()) && (thisID>0)){
thisName = tempScan.next();
//The data will only be inserted if both segments of data are entered
myTable.insert(new Student(thisID, thisName));
}else{
System.out.println("Invalid values.");
}
}else{
System.out.println("Invalid value.");
}
为什么需要第二台扫描仪
范例
如果要添加验证,请执行以下操作:
String input = scanner.nextLine();
if(input.contains(" ")) {
// You know there's a space in it.
String[] tokens = input.split(" ");
if(tokens.length == 2) {
// You know it's a value, followed by a space, followed by a value.
if(tokens[0].matches("[0-9]+")) {
// You know it only contains numbers.
Long id = Long.parseLong(tokens[0]);
}
}
}
我没有运行它,但我想您的问题是,当您输入文本“a”并按enter键时,这一行是错误的:
if(tempScan.hasNextLong()){
因为你没有输入一个数字。因此它会下降到下一个块。如果你先输入数字,我怀疑你的代码有问题。你可能需要在它周围添加一个“while”循环,直到它得到一个数字为止。你已经有一个从System.in读取的扫描仪,不需要另一个。你制作的第二个扫描仪是它是一个字符串的扫描器,它永远不会有下一个字符串,因为它在你的字符串之后没有什么可扫描的
我不会为你写任何代码,因为这是家庭作业,但在检查用户输入时,请坚持使用原始扫描仪。那么问题出在哪里,程序说无效值(而不是“值”),或者程序不再要求ID和名称?请发布整个代码。。
if(tempScan.hasNextLong()){