显示多个结果数组搜索

时间:2012-06-01 13:05:22

标签: java arrays search date

我正在搜索具有开始日期的记录:[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无法解除引用'

我希望我能很好地解释我的问题,

非常感谢你的帮助。

3 个答案:

答案 0 :(得分:1)

使用.equals()进行字符串比较 ====检查引用,而.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;
                }

            }

答案 1 :(得分: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
}

答案 2 :(得分:1)

我同意之前的回答。为什么你有休息声明?一旦if子句中的某些内容不匹配,它就会从for循环中断(break语句对if else语句不起作用)。

但我也对你在这里说的话感到困惑:

  

“我认为问题在于for循环。它计算元素的数量,而不是总记录。

     

这存储在“numberOfOrdersInArray”int变量中。“

numberOfOrdersInArray是一个int变量吗?在那种情况下,为什么你使用numberOfOrdersInArray.length? .length是一个由数组保存的变量,这就是为什么它有效,如果你有arrayName.length。但是如果numberOfOrdersInArray只是一个计数器int变量,那么就单独使用它,看起来像:

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