2012-04-17 60 views
0

我必须搜索一个凯迪拉克对象数组,以显示某个模型的结果,比如说“Escalade”,并且我无法确定我的代码需要放在哪里为了在控制台屏幕上打印结果。当我尝试打印我现在拥有的内容时,我一直陷在循环中。关于我的程序的其他一切工作正常,我只需要能够在控制台屏幕上显示多个结果。循环搜索一个数组,打印多个结果

这里是我的代码:

while(response != null) 
    { 
     if(response.length() > 0) 
     { 
     count = 0; 
     found = false; 
     while(count < data.length && data[count] != null && !found) 
     { 
      item = data[count].getModel(); 
      if(item.equalsIgnoreCase(response)) 
      { 

      found = true; 
      } 
      else{ 
      count++; 
      } 
      message = "Model: " + data[count].getModel() + "\n" + 
        "Stock Number: " + data[count].getStockNum() + "\n" + 
        "Color   : " + data[count].getColor() + "\n" + 
        "Price : " + data[count].getPrice(); 
      System.out.print(message); 
     } 

     if(!found) 
      message = "Model not found in array."; 
    } 
    } 
    response = JOptionPane.showInputDialog(prompt); 
    } 

而且,搜索的第二部分是用来显示车是在用户的输入$ 3000的搜索结果,并肯定会升值对一些指导因为这两种类型的搜索相对相似。

回答

1

您没有显示所有代码,但是如果处于无限循环状态,请查看循环条件。看起来您正在查看response是否为空,但response永远不会在循环内部分配,所以一旦进入,您将被卡住。

而且,count应该随着时间增加,因为您正在循环中检查它。当找到一个人时,你不会增加它,因此循环不会中断。

我建议再次从头开始编写这段代码。我认为你可以简化你的条件,使自己(和分级)更容易理解。

我会帮你开始。

do { 
    response = JOptionPane.showInputDialog(prompt); 
    for (int i=0; i < data.length; i++) { 
     // do stuff with data[i] here 
    } 
} while(response != null); 

我认为do-while循环对于检查用户输入是有意义的。如果循环遍历元素,则for循环是有意义的。从这里你可以检查用户输入,不需要计算长度,因为equalsIgnoreCase()将为你处理字符串比较。

0

如果匹配或找到模型,您的内部循环永远不会结束。因此,在这种情况下,循环变得无限。您需要增加内部循环中的计数。因此,此增量应该独立发生,并且您可以安全地完成内部循环。但是当你找到一个模型并且在这之后显示它的信息时,你可以轻松地做一件事来打破内部循环。

while(count < data.length && data[count] != null && !found) 
     { 
      item = data[count].getModel(); 
      if(item.equalsIgnoreCase(response)) 
      { 

      found = true; 
      break; 
      } 
      else{ 
      count++; 
      } 
      message = "Model: " + data[count].getModel() + "\n" + 
        "Stock Number: " + data[count].getStockNum() + "\n" + 
        "Color   : " + data[count].getColor() + "\n" + 
        "Price : " + data[count].getPrice(); 
      System.out.print(message); 
     } 

希望这会帮助你。