如何使用 !.equals 来比较字符串?

3
我们正在进行小组作业。程序的一部分是让用户输入“pay”,然后输入学生的社会保险号(SIN)和要扣除的金额。例如:pay,193678187,900
将SIN与文件中的SIN列表进行比较,生成一个数组并进行比较,curSin.equals(stuSin))。其中curSinstuSin都是字符串。
如果找到了SIN,则会从学生的余额(未显示)中减去相应的金额,并将其写入文件write(student,inrec)
如果未找到SIN,则应返回“SIN not found”。
我们的问题是,即使找到了SIN,它仍然返回“SIN not found”。我们认为这与if语句和不等式比较有关,但我们已经尝试了我们能想到的一切,但无法使其正常工作。
非常感谢您的帮助。 谢谢。
以下是代码片段。
    if (cmd.equals("pay") && p.length == 3)
    { // first word is "pay";three terms (cmd, sin, $)
        System.out.println("pay");
        // Pay: decreases student payment, notifies of overpayment
        String stuSin = p[1];
        double stupay = Double.parseDouble(p[2]);
        for (int i = 0; i < student.length; i++)
        {
            Student x1 = student[i];
            String curSin = x1.getSin();
            if (curSin.equals(stuSin))
            {
                double curpay = x1.getBal();
                double newBal = curpay - stupay;
                if (stupay > curpay)
                {
                    JOptionPane.showMessageDialog(null, "Overpayment");
                    System.exit(0);
                }
                x1.setBal(newBal);
                System.out.println(x1.getBal());

                write(student, inrec);
            }
            else if (!curSin.equals(stuSin))
            {
                JOptionPane.showMessageDialog(null, "SIN not found"); // sin not found
                System.exit(0);
            }

        }// end of for loop
    }

2
调试!在“if”之前放置System.out.println(cmd)。同时,“p.length==3”是多余的。 - Tomasz Nurkiewicz
3
为什么在你的else语句中有一个if条件?你在第一个if语句中已经检查了同样的条件(if(curSin.equals(stuSin)))。 - user973999
1
如果您正确缩进代码,这将非常有帮助。一些人可能会对{放在新行或上一行提出异议,但基本的缩进(无论您选择哪种变体)都非常重要。我重新格式化了代码以使其更易读。 - Jim Garrison
我们需要p.equals用于代码的一部分,但未显示出来。对于缩进不当,我们很抱歉;我们是Java的新手。 - Riley
你应该在任何允许的语言中使用适当的缩进。 (除 RPG 外,几乎所有语言都是如此。) - Hot Licks
显示剩余2条评论
2个回答

5

如果第一个匹配是正确的话,你的程序似乎可以正常工作。

但是第一个不是正确的匹配。因此它会在不查看第二个的情况下退出。

你可能想要遍历所有的学生,并且在第一次匹配时跳出循环。

只有在遍历了所有的学生后没有匹配的情况下才运行 JOptionPane.showMessageDialog(null,"SIN not found"); //sin not found


再次审视,我们也发现了这个问题。然而,我们不知道如何解决它。 - Riley

3

你使用equals方法似乎没有任何问题。

你应该添加一些调试语句(或者实际使用调试器)来确保你真正比较了想要比较的字符串。

System.out.println("stuSin: '" + stuSin + "'");
System.out.println("curSin: '" + curSin + "'");

没想到这个!问题已经解决了,我们只需要在第一次找到SIN后退出for循环即可。 - Riley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接