我正在搜索具有开始日期的记录:[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无法解除引用'
我希望我能很好地解释我的问题,
非常感谢你的帮助。
答案 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++) {