1

開始日が [userinput] のレコードを検索しています。一致するものがあれば、そのレコードが表示されます。問題は、私のプログラムの性質上、すべての一致に必要であるということです (同じ場所に複数ある可能性があります)。日) 何らかの方法で表示する必要があります。

これは私がこれまでに持っているものです:

     public void searchDay() {
    String idInputString  = JOptionPane.showInputDialog(null, "Please enter the Date you're searching for:");


       try {   
            for (int i = 0; i < orderID.length; i++) {
                if (idInputString.equals(startDate[i])) {

                    txtOrderID.setText(orderID[i]);
                    txtOrderForename.setText(customerForename[i]);
                    txtOrderSurname.setText(customerSurname[i]);

                    txtOrderAddress1.setText(address1[i]);
                    txtOrderAddress2.setText(address2[i]);
                    txtOrderTown.setText(town[i]);
                    txtOrderCounty.setText(county[i]);
                    txtOrderPost.setText(postCode[i]);
                    txtOrderCarModel.setText(carModel[i]);

                    txtOrderCarReg.setText(carReg[i]);
                    txtOrderStartDate.setText(startDate[i]);
                    txtOrderStartTime.setText(startTime[i]);

                    txtOrderSerial.setText(serialNum[i]);

                } else {
                    JOptionPane.showMessageDialog(null, "Order ID Doesn't Exist", "Error!", JOptionPane.WARNING_MESSAGE);
                    break;
                }

            }

      } catch (Exception e) { 
       JOptionPane.showMessageDialog(null, "Order ID Doesn't Exist", "Error!", JOptionPane.WARNING_MESSAGE);
       initFields();

   }
}     

存在することがわかっている日付を入力してもエラーが発生します。

問題は for ループにあると思います。合計レコード数ではなく、要素数をカウントします。

これは「numberOfOrdersInArray」int 変数に格納されます。

しかし、もしそうなら:

     for (int i = 0; i < numberOfOrdersInArray.length; i++) {

「int を逆参照できません」というエラーが表示されます

問題を十分に説明したことを願っています。

助けてくれて本当にありがとうございます。

4

3 に答える 3

1

私は前の答えに同意します。なぜbreakステートメントがあるのですか?if句で何かが一致しないとすぐに、forループから抜け出します(breakステートメントはif elseステートメントに対して何もしません)。

しかし、私はあなたがここで言ったことについても混乱しています:

「問題はforループにあると思います。これは、レコードの総数ではなく、要素の数をカウントします。

これは「numberOfOrdersInArray」int変数に格納されます。

numberOfOrdersInArrayはint変数ですか?その場合、なぜnumberOfOrdersInArray.lengthを使用しているのですか?.lengthは配列によって保持される変数であるため、arrayName.lengthがある場合に機能します。ただし、numberOfOrdersInArrayが単なるcounter int変数である場合は、それを単独で使用すると、次のようになります。

for (int i = 0; i < numberOfOrdersInArray; i++) {
于 2012-06-01T13:21:08.887 に答える
1
 break; statement will be inside the if condition.

else {
          JOptionPane.showMessageDialog(null, "Order ID Doesn't Exist", "Error!", JOptionPane.WARNING_MESSAGE);
             //break;//Wrong HERE
}
于 2012-06-01T13:11:59.407 に答える
1

.equals()文字列比較not に使用します==。実際に文字列の文字を比較し==ながら、参照に対してチェックします。.equals()これは重要。

編集:

//instead of a count, you could also use a boolean
for (int i = 0, count= 0; i < orderID.length; i++) {
                if (idInputString.equals(startDate[i])) {

                    txtOrderID.setText(orderID[i]);
                    txtOrderForename.setText(customerForename[i]);
                    txtOrderSurname.setText(customerSurname[i]);

                    txtOrderAddress1.setText(address1[i]);
                    txtOrderAddress2.setText(address2[i]);
                    txtOrderTown.setText(town[i]);
                    txtOrderCounty.setText(county[i]);
                    txtOrderPost.setText(postCode[i]);
                    txtOrderCarModel.setText(carModel[i]);

                    txtOrderCarReg.setText(carReg[i]);
                    txtOrderStartDate.setText(startDate[i]);
                    txtOrderStartTime.setText(startTime[i]);

                    txtOrderSerial.setText(serialNum[i]);
                    count++;
                } 
                if(i == orderID.length - 1 && count==0){
                    JOptionPane.showMessageDialog(null, "Order ID Doesn't Exist", "Error!", JOptionPane.WARNING_MESSAGE);
                    break;
                }

            }
于 2012-06-01T13:06:48.243 に答える