扫描仪使用Java从命令行获取数据时出现问题

扫描仪使用Java从命令行获取数据时出现问题,java,java.util.scanner,Java,Java.util.scanner,我承认,这是学校的作业。。。但我根本不知道我做错了什么 我有一个带有插入函数的哈希表。下面的代码应该以“长字符串”(即“32452 John”)的格式从系统中获取一行数据。第一个标记必须是ID号的长标记,后面必须是名称的字符串标记。当我运行程序,到达必须执行的部分时(在开关语句中),我输入了“a”,然后按enter键。命令行立即读取“无效值”。(注意:不是值,因为这意味着它会命中嵌套的if语句。它不允许我键入任何数据。提前谢谢 System.out.println("Enter ID and N

我承认,这是学校的作业。。。但我根本不知道我做错了什么

我有一个带有插入函数的哈希表。下面的代码应该以“长字符串”(即“32452 John”)的格式从
系统中获取一行数据。第一个标记必须是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()){