【问题标题】:Displaying Multiple Results Array Search显示多个结果数组搜索
【发布时间】:2012-06-01 13:05:21
【问题描述】:

我正在搜索具有开始日期的记录:[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”

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

非常感谢您的帮助。

【问题讨论】:

    标签: java arrays search date


    【解决方案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;
                    }
    
                }
    

    【讨论】:

    • 谢谢,改成: if (idInputString.equals(startDate[i])) { 还是找不到记录。
    • 请添加您的完整代码。我认为您正在循环错误的变量。无论是那个还是你的字符串实际上都是不同的。使用断点调试代码或使用打印语句。
    【解决方案2】:
     break; statement will be inside the if condition.
    
    else {
              JOptionPane.showMessageDialog(null, "Order ID Doesn't Exist", "Error!", JOptionPane.WARNING_MESSAGE);
                 //break;//Wrong HERE
    }
    

    【讨论】:

    • 是的,这也可能是答案,这取决于 speakon 到底想要完成什么。
    • 是的,谢谢!但现在我有一个新问题:我输入日期,它搜索,它显示相应的记录。但是它反复向我发送错误框,即使它已被发现。
    • 显然是因为正在输入 else 框,因为您正在循环。每次字符串不匹配时,都会显示错误。
    • @DhruvGairola 现在完美运行,非常感谢您的帮助。现在我的第二个问题是,如何在一个 GUI 表单上显示具有此日期的每条记录?我对 GUI 的了解很糟糕。谢谢。
    • speakon,要在未显示任何内容时显示错误,请查看我的更新答案。你的第二个问题实际上是一个 java 问题而不是一个 gui 问题。
    【解决方案3】:

    我同意前面的回答。为什么你有一个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++) {
    

    【讨论】:

    • 代表我的白痴编码,现在已经全部清除了。只是最后一期:“atDhruvGairola 现在完美运行,非常感谢您的帮助。现在我的第二个问题是,如何在一个 GUI 表单上显示具有此日期的每条记录?我对 GUI 的了解很糟糕。谢谢你。”待排序,感谢您的意见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    相关资源
    最近更新 更多