public static int logIn(Statement stmt){
int id;
String pw;
String select;
boolean match;
System.out.print("userID: ");
id = input.nextInt();
input.nextLine();
System.out.print("password: ");
pw = input.next();
input.nextLine();
select = "SELECT user_id, password FROM login WHERE user_id = " + id;
try{
ResultSet rs = stmt.executeQuery(select);
while(rs.next()){
if(id == rs.getInt(1) && pw.equals(rs.getString(2))){
match = true;
}
}
}
catch(SQLException logfail){
logfail.printStackTrace();
System.out.println("could not print password");
}
if(match == true)
return id;
else break;
}
在我的程序中,用户将输入他们的登录信息。然后他们将面对一个菜单,他们在其中选择选项1-7。选项1-7只是各种查询,将在他们自己的数据上运行。
我的登录功能是验证他们是谁,以便让他们访问自己的数据。如果验证通过,我会返回他们输入的身份证号码,以便我可以将其传递给其他功能(1-7)。
在我的if-else语句中,如果密码匹配,我希望它返回id号,如果失败则返回null
。
我知道int
不能null
,但此方法的返回类型为int
,我该怎么办?
为了及时完成我的任务,如果事情不匹配则表示登录失败,我将返回值0。但是,对我来说更重要的是成为一名优秀的Java程序员,所以我想知道:
谢谢!
答案 0 :(得分:3)
您可以做出的最简单的更改是返回Integer
并返回null
。 Integer
是一个对象,这就是你可以这样做的原因。
或者,如果错误导致无法登录,则可能会抛出异常。这可能不是一个例外情况,所以这可能不是最好的方式。
你可以做的最好的事情就是不返回int / Integer。相反,有一个代表接下来要做的事情的类。
答案 1 :(得分:3)
返回零,或-1的负值是一种可能性。您还可以创建一个已检查的异常LoginException
,如果登录凭据无效,则会抛出该异常。这种方法的专家是你有一个很好的方法来记录LoginException
中的错误登录尝试。
答案 2 :(得分:2)
每次声明具有基本类型的函数时,它必须返回一个值或抛出异常。您可以使用包装器类型:Boolean,Integer,Long等返回null,因为它们是Java中的“真实”对象。
答案 3 :(得分:0)
如果您声明了一个int类型的方法,它必须返回一个int。只需声明/定义一个invalid_return变量,如果没有找到匹配项将返回该变量,就像那样简单。
答案 4 :(得分:0)
当方法的返回类型为int
时,必须返回int
。要指示发生错误,您可以返回一个无效的值或抛出异常。
答案 5 :(得分:0)
不从方法返回的最佳方法是抛出异常。当人们忘记检查它们时,返回错误值(如null或零)会导致错误代码。一个例外是明确的,不容忽视。
答案 6 :(得分:0)
真的很明智,你应该通过将两者放在不同的方法中来将你的回报数与你的查询分开。 要返回null,您需要从方法返回一个类,如ADT(抽象数据类型)。 但是,如果你可以简单地将0归零作为null,并使用类Integer的变量在每次使用之前将其重置为null,那么这可能过于复杂,因此如果它返回零,则只需要输入if-else来测试“整数“变量为null或包含重置为从方法返回为int的数字。