0

我正在开发一个菜单驱动的程序,该程序带有用户想要做的数字选项。输入后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()and编辑其姓名、年龄等的其他选项,它似乎可以正常工作in.nextInt()。无论出于何种原因,in.nextLine()默认为NULL在用户有机会输入任何内容之前。

我试过String trash = in.next();在阅读之前写一条线in.nextLine()。这会阻止程序崩溃,但会切断地址的数字部分。

4

2 回答 2

1

您可能正在使用in.nextInt()来检索edit. 当您这样做时,输入流上仍然会有一个换行符 ( \n),因此您的调用in.nextLine()是检索该换行符。其他方法将忽略空格,因此它们会使用换行符,并且它们会按预期工作。

如果您调用in.nextLine()两次,第二次调用将返回您要查找的行。或者,您可能希望in.nextLine()在检索edit值并从那里解析整数时调用。

于 2013-03-15T23:11:31.367 回答
0

试着把这个

in.skip("\r\n|[\n\r\u2028\u2029\u0085]");

就在上面

in.nextLine();

这应该可以防止您跳过输入,并且如果您使用任何类型的循环也会很好,因为有时额外的 in.nextLine() 会引起头痛。

于 2013-03-15T23:34:45.747 回答