gpt4 book ai didi

java - 方法返回 false,但条件匹配并且应该返回 true

转载 作者:行者123 更新时间:2023-12-02 01:33:39 25 4
gpt4 key购买 nike

我当前有一些具有 enum enumUserType 类型的 User 对象,但其中一个具有 LIBRARIAN 的 enumUserType。图书馆员用户需要具有特殊权限,在这种情况下,它将有一个可以访问的不同菜单。

我试图循环遍历用户数组列表,如果该用户的用户类型为图书管理员,则返回 true,如果是其他用户类型,则返回 false。

经过一些测试,似乎即使我的对象只有一个是图书管理员,整个方法也会返回 true。然后我无法引导不同的用户类型进入不同的菜单路径。我的第一个对象不是图书管理员,但第二个对象是。

public boolean verifyLibrarian() {
for (User s : users) {
//if just one of my objects is librarian it will return true.
if (s.getUserType() == User.enumUserType.LIBRARIAN) {
return true;
}
else
{
return false;
}
}
throw new IllegalArgumentException("Username or password is
incorrect");

}

这也是我的 while 循环:

while(exit == 0)
{

Scanner scanner = new Scanner(System.in);
System.out.println("Enter your user name");
String userName = scanner.nextLine();

System.out.println("Enter your password name");
String passWord = scanner.nextLine();


if (library.verifyLogin(userName, passWord)== true && library.verifyLibrarian() != true)
{
this.currentLoginUser = userName;
mainMenuAfterLogin();
}
//because my method is returning true, even logged in non librarians
//will get lead down to this menu
else if(library.verifyLogin(userName, passWord) == true &&
library.verifyLibrarian() == true)
{
this.currentLoginUser = userName;
librarianMenuEditBook();

}
}

如果您需要更多信息,请告诉我。非常感谢您的帮助。

最佳答案

您需要将 return false 放在循环之外,以便在返回 false 之前检查每个用户

for (User s : users) {
//if just one of my objects is librarian it will return true.
if (s.getUserType() == User.enumUserType.LIBRARIAN) {
return true;
}
}
return false;

或者使用anyMatch

return users.stream().anyMatch(s -> s.getUserType() == User.enumUserType.LIBRARIAN);

如果您的意图是在未找到用户的情况下真正抛出异常(当前在您的代码中无法访问该异常,则您应该抛出该异常而不是返回

public boolean verifyLibrarian() {
for (User s : users) {
//if just one of my objects is librarian it will return true.
if (s.getUserType() == User.enumUserType.LIBRARIAN) {
return true;
}
}
throw new IllegalArgumentException("Username or password is incorrect");
}

或者在流中

users.stream()
.filter(s -> s.getUserType() == User.enumUserType.LIBRARIAN)
.findAny()
.orElseThrow(() -> new IllegalArgumentException("Username or password is incorrect"));

关于java - 方法返回 false,但条件匹配并且应该返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55586262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com