3

グループ課題に取り組んでいます。プログラムの一部は、「支払い」を入力するために使用され、その後に学生の SIN (社会保険番号) と口座から差し引かれる金額が続きます。たとえば、pay,193678187,900.

SIN は、ファイルからの SIN のリストと比較され、配列に生成されて比較されますcurSin.equals(stuSin))curSinでありstuSin、両方とも文字列です。

SIN が見つかった場合、学生の残高 (表示されていません) から金額を減らし、ファイルに書き込みますwrite(student,inrec)

SIN が見つからない場合は、「SIN が見つかりません」を返す必要があります。
私たちの問題は、SIN が見つかったとしても、「SIN が見つかりません」を返すことです。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
    }
4

2 に答える 2

5

リストの最初の部分が正しく一致していれば、プログラムは正しく機能するようです。

しかし、最初のものは正しい一致ではありません。したがって、2番目を見ることなく終了します。

あなたはおそらくすべての学生を繰り返したいと思うでしょう、そしてそれが最初に一致するときはループから抜け出します。

一致せずにすべての生徒を反復処理する場合にのみ、JOptionPane.showMessageDialog(null,"SIN not found"); //sin not found

于 2012-04-11T20:01:22.527 に答える
3

equalsメソッドの使用に問題はないようです。

必要な文字列を実際に比較していることを確認するために、いくつかのデバッグステートメントを追加する(または実際にデバッガーを使用する)必要があります。

System.out.println("stuSin: '" + stuSin + "'");
System.out.println("curSin: '" + curSin + "'");
于 2012-04-11T20:01:51.903 に答える