我承认,这是一项学校作业......但我根本无法弄清楚我做错了什么。
我有一个带插入函数的哈希表。以下代码应该采用格式为“Long String”的System.in
中的一行数据(即“32452 John”)。对于ID号,第一个标记必须是Long,并且必须后跟名称的String标记。当我运行程序并且我到达必须执行的部分时(它在switch
语句中),我输入'a'并按回车键。命令行会立即显示“无效值”。 (注意:不是VALUES,因为这意味着它会触及嵌套的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.");
}
答案 0 :(得分:0)
为什么需要第二个Scanner
?
示例
String input = scanner.nextLine();
String[] tokens = input.split(" ");
Long id = Long.parseLong(tokens[0]);
String name = tokens[1];
如果您想添加验证:
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]);
}
}
}
答案 1 :(得分:0)
我没有运行它,但我猜你的问题是,当你输入文字'a'并点击回车时,这一行是假的:
if(tempScan.hasNextLong()){
因为你没有输入数字。因此它下降到下一个块。如果你先输入一些数字,我怀疑你的代码是有效的。你可能需要在它周围添加一个'while'循环,直到它得到一个数字。
答案 2 :(得分:0)
您已经有一个从System.in读取的扫描仪,不需要另一个。你做的第二个是String的扫描程序,它永远不会有nextLong,因为它在你的String后没有任何东西可以扫描。
我不会为您编写任何代码,因为这是作业,但在检查用户输入时会坚持使用原始扫描仪。