Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
增强for循环下的Java if语句不起作用_Java_If Statement_For Loop - Fatal编程技术网

增强for循环下的Java 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 ==

这是一个代码片段,我正在使用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 == 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。我回答了第二题。没关系。谢谢!现在可以了!