我正在开发一个菜单驱动的程序,其中包含用户想要做的数字选项。输入2
后,用户可以通过输入新地址来更新地址,如下所示:
if (edit == 2) {
System.out.print("Please enter your new address: ");
String address = in.nextLine();
stmt.executeUpdate("UPDATE PATIENTS " +
"SET ADDRESS = '" + address + "' " +
"WHERE LOGIN = '" + username + "'");
}
我遇到的问题是,一旦用户输入选项2
,他们就永远无法尝试输入他们的地址,因为程序认为输入了空值然后尝试执行更新语句在数据库上,由于地址不能是NULL
而失败。
是否有理由认为我遗失了垃圾值?对于用户尝试使用in.next()
和in.nextInt()
编辑其姓名,年龄等的其他选项,似乎没有问题。无论出于何种原因,in.nextLine()
在用户有机会输入任何内容之前默认为NULL
。
我在阅读String trash = in.next();
之前尝试过in.nextLine()
行。这会阻止程序崩溃,但它会切断地址的数字部分。
答案 0 :(得分:1)
您可能正在使用in.nextInt()
来检索edit
。当您这样做时,输入流上仍会有换行符(\n
),因此您对in.nextLine()
的调用将检索该换行符。其他方法将忽略空格,因此新行由它们使用并且它们按预期工作。
如果您拨打in.nextLine()
两次,则第二次通话将返回您要查找的线路。或者,您可能希望在检索in.nextLine()
值时调用edit
并从那里解析整数。
答案 1 :(得分:0)
尝试把这个
in.skip("\r\n|[\n\r\u2028\u2029\u0085]");
正好在
之上in.nextLine();
应该阻止你跳过输入,如果你使用任何类型的循环也会很好,因为有时额外的in.nextLine()会引起麻烦。