Java 函数总是返回false,即使缓冲区是真值?
为什么即使缓冲区为true,函数也总是返回false, 代码如下:Java 函数总是返回false,即使缓冲区是真值?,java,list,boolean,Java,List,Boolean,为什么即使缓冲区为true,函数也总是返回false, 代码如下: public class getCredentials { User login = new User(); public boolean akses(String id, String password){ boolean buffer=false; for (int i=0;i<login.sizeArrayList();i++){ buffe
public class getCredentials {
User login = new User();
public boolean akses(String id, String password){
boolean buffer=false;
for (int i=0;i<login.sizeArrayList();i++){
buffer = login.getId(i).equals(id) && login.getPassword(i).equals(password);
}
return buffer;
}
}
公共类getCredentials{
用户登录=新用户();
公共布尔akses(字符串id、字符串密码){
布尔缓冲区=假;
对于(int i=0;i您对akses方法的逻辑有疑问
如果列表为空,该方法可以返回false,因为返回的是初始化值
但也将返回true当且仅当列表中最后一个用户的id和密码正确时
您不需要迭代整个列表来实际验证用户\
hpw将修复它
使用Java8,您可以对列表进行流式处理,然后使用凭据进行过滤,然后
检查列表是否为空
查找any,如果未找到,则返回null
例如:
public boolean access(String id, String password){
User x = login.getArrayList().stream()
.filter(p -> login.validateId(id) &&
login.validatePassword(password))
.findAny().orElse(null);
return x != null;
}
您可以像这样更新akses
方法:
public boolean akses(String id, String password){
boolean buffer=false;
for (int i=0;i<login.sizeArrayList() && !buffer;i++){
buffer = login.getId(i).equals(id) && login.getPassword(i).equals(password);
}
return buffer;
}
public boolean akses(字符串id、字符串密码){
布尔缓冲区=假;
对于(inti=0;i,正如前面的答案所说:假设您有三个用户,第二个用户就是您正在搜索的用户
循环之前的初始化将“buffer”设置为false。
循环的第一次迭代将“buffer”设置为false。
第二次迭代将“buffer”设置为true。
第三次迭代将“buffer”设置为false
然后,将返回“buffer”的当前值(即“false”)
正确的代码位如下所示:
public class getCredentials {
User login = new User();
public boolean akses(String id, String password){
for (int i=0;i<login.sizeArrayList();i++){
if(login.getId(i).equals(id) && login.getPassword(i).equals(password)) return true;
}
return false;
}
}
公共类getCredentials{
用户登录=新用户();
公共布尔akses(字符串id、字符串密码){
对于(int i=0;i,该方法返回列表最后一个条目的测试。这是故意的吗?我假设不是。也许您喜欢编写类似
buffer |=
如果这是您想要的,那么在第一次匹配时立即返回true就足够了。您确定此sizeArrayList不是空的吗???…发布您的。这是一个开始使用调试器的好机会。使用调试器,您可以在代码执行时逐行检查代码,观察运行时行为并更改您的值r变量。当您这样做时,具体会发生什么?循环是否迭代?在循环的每次迭代中,buffer
设置为什么?更具体地说,在循环的最后一次迭代中,它设置为什么,因为这是您返回的值?您是否打算在找到单个匹配项后返回?具有非标准的结束条件for循环中的ia是一种糟糕的样式,这使得代码更难阅读和理解。谢谢你的评论!我不知道它不是标准的。只是要明确一点,在for循环中做什么没有“官方”标准,但通常的两种设计模式是“从0到I计数”和“for(迭代器.begin();迭代器.next();)”或者类似的,如果你在循环头中插入任何比这更复杂的东西,它很容易被其他编码人员忽略。因此,最好避免它,并在循环体本身中添加额外的退出条件,这会使代码更清晰。应该是对id和密码的验证…为了安全起见,我是最后一个循环的int代码的作用是假设存在一个验证id和passw的方法