增强for循环下的Java if语句不起作用
这是一个代码片段,我正在使用hashset用户为登录系统处理它。 我检查了增强的for循环部分,它可以工作,但是if语句似乎永远不会工作,即使值相等增强for循环下的Java if语句不起作用,java,if-statement,for-loop,Java,If Statement,For Loop,这是一个代码片段,我正在使用hashset用户为登录系统处理它。 我检查了增强的for循环部分,它可以工作,但是if语句似乎永远不会工作,即使值相等 if (comm.equals("Sign in")) { user urs = new user(p_name, p_pass, p_id ); Iterator<user> iter = Users.iterator(); for(user obj : Users) { if (p_u ==
if (comm.equals("Sign in")) {
user urs = new user(p_name, p_pass, p_id );
Iterator<user> iter = Users.iterator();
for(user obj : Users) {
if (p_u == obj.getUsername()&& p_pw == obj.getPassword ()&& p_sn== obj.getStudentID()) {
JOptionPane.showConfirmDialog(
jf,
"Success", "Success",
JOptionPane.DEFAULT_OPTION);
break;
} else {
log_in.setText("Try Again");
exit.setText("Create User");
}
if(comm.equals(“登录”)){
用户urs=新用户(p_名称、p_通行证、p_id);
迭代器iter=Users.Iterator();
for(用户对象:用户){
如果(p_u==obj.getUsername()&&p_pw==obj.getPassword()&&p_sn==obj.getStudentID()){
JOptionPane.showConfirmDialog(
jf,
“成功”,“成功”,
JOptionPane.DEFAULT_选项);
打破
}否则{
登录.setText(“重试”);
exit.setText(“创建用户”);
}
请记住,在Java==运算符中,测试值的相等性,在本例中为两个引用。这两个引用不指向同一内存位置,因此永远不会等于true。请使用equals()
测试字符串值相等性的方法。假设p\u
,p\u pw
和p\u sn
是字符串
对象引用,下面的代码检查这两个对象是否是相同的对象(或者它们对对象在内存中的位置的引用是否相同)而不是字符串对象是否共享相同的字符序列
if (p_u == obj.getUsername()&& p_pw == obj.getPassword ()&& p_sn== obj.getStudentID())
相反,要检查它们的字符序列是否匹配,应该使用.equals()
方法
if (p_u.equals(obj.getUsername())&& p_pw.equals(obj.getPassword ())&& p_sn.equals(obj.getStudentID()))
我希望这会有所帮助。我认为您需要将其更改为以下内容:
if (comm.equals("Sign in")) {
user urs = new user(p_name, p_pass, p_id );
Iterator<user> iter = Users.iterator();
for(user obj : Users) {
if (p_u.equalsIgnoreCase(obj.getUsername())&& p_pw.equals(obj.getPassword())&& p_sn.equals(obj.getStudentID())) {
JOptionPane.showConfirmDialog(
jf,
"Success", "Success",
JOptionPane.DEFAULT_OPTION);
break;
} else {
log_in.setText("Try Again");
exit.setText("Create User");
}
if(comm.equals(“登录”)){
用户urs=新用户(p_名称、p_通行证、p_id);
迭代器iter=Users.Iterator();
for(用户对象:用户){
if(p_.equalsIgnoreCase(obj.getUsername())&p_pw.equals(obj.getPassword())&p_序列号equals(obj.getStudentID()){
JOptionPane.showConfirmDialog(
jf,
“成功”,“成功”,
JOptionPane.DEFAULT_选项);
打破
}否则{
登录.setText(“重试”);
exit.setText(“创建用户”);
}
如果用户名是字符串,请使用String.equals(另一个字符串)与其说==中断中断循环,不如说你的意思是继续?@AnubianNoob OP说如果语句从未执行过,中的代码…@Sarasepola:我很确定你的评论就是答案。语句迭代器iter=Users.Iterator();
没有被使用(对于“增强的for循环”)而且,Users
似乎没有遵循通用的-只有类才应该以大写开头。老实说,我很困惑——类似乎被称为user
,集合Users
。这几乎是命名约定的倒退:D至于java中的字符串比较,oth已经说过了一切呃,已经有评论了。谢谢你,这就是问题所在!非常感谢!干得好。这就是我在15分钟前的帖子中给出的解决方案,但是anyway@zpontikas-检查答案上的时间。你比我晚了将近10分钟才回答。我记得你在发表答案时在评论中也有同样的想法。嗯。你是r怀特:P。我回答了第二题。没关系。谢谢!现在可以了!