【问题标题】:How to use !.equals with strings?如何使用 !.equals 与字符串?
【发布时间】:2012-04-24 04:11:33
【问题描述】:

我们正在处理一项小组作业。该程序的一部分是供用户输入“支付”,然后输入学生的 SIN(社会保险号码)和从他们的账户中扣除的金额。例如,pay,193678187,900

将 SIN 与文件中的 SIN 列表进行比较,生成一个数组并进行比较,curSin.equals(stuSin))curSinstuSin 都是字符串。

如果找到 SIN,它将从学生的余额中减少金额(未显示)并将其写入文件write(student,inrec)

如果未找到 SIN,则应返回“未找到 SIN”。
我们的问题是,即使找到了 SIN,它仍然返回“SIN not found”。我们认为它与 if 语句和不等于比较有关,但我们已经尝试了所有我们能想到的方法,但无法使其正常工作。

任何帮助将不胜感激。 谢谢。

代码如下:sn-p。

    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
    }

【问题讨论】:

  • 调试!将System.out.println(cmd) 放在if 之前。 p.length==3 也是多余的。
  • 为什么在你的 else 语句中你有一个 if 条件?您在第一个 if ( if (curSin.equals(stuSin)) ) 中检查相同的条件。
  • @TomaszNurkiewicz 我不认为 p.length 是多余的。由于这只是一个代码片段,无法分辨,但我猜它是必需的。
  • 正确缩进代码会有很大帮助。有些人可能会在换行符或前一行对{ 提出质疑,但基本缩进(无论您选择哪种变体)都非常重要。我重新格式化了代码以使其更具可读性。
  • @emory:啊,我还以为是cmd.length() == 3——你说得对,对不起。

标签: java string if-statement equals


【解决方案1】:

如果列表中的第一个匹配正确,您的程序似乎可以正常运行。

但第一个不是正确的匹配。所以它没有看第二个就退出了。

您可能想要遍历所有学生并 第一次匹配就跳出循环。

当且仅当您遍历所有学生而不匹配运行JOptionPane.showMessageDialog(null,"SIN not found"); //sin not found

【讨论】:

  • 再看一遍,我们也看到了这个问题。但是,我们不知道如何解决它。
【解决方案2】:

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

您应该添加几个调试语句(或实际使用调试器)以确保您确实在比较所需的字符串。

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

【讨论】:

  • 没想到!修复了问题,我们只需要在第一次找到 SIN 后退出 for 循环。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
  • 2019-04-18
相关资源
最近更新 更多