2

我希望我的程序只打印一次“else 语句”,只有在 for 循环已经搜索了我的“orderProduct”数组长度之后。

我目前拥有的:

do
{
    System.out.print("Enter Order: "); 
    userOrder = in.next();

    for(int i=0; i<orderProduct.length; i++)
    {
        if(userOrder.equals(orderProduct[i].code))
        {
            System.out.print("Enter Amount: ");
            userQuantity = in.nextInt();
            break;
        }
        else
        {
            System.out.println("Sorry, invalid order.");
        }
    }
}
while(!userOrder.equals("0"));

此代码在检查数组的第一个元素后始终执行“else 语句”。只有当 for 循环遍历整个数组时,有没有办法打印它?

4

6 回答 6

5

您可以在 if 循环中设置一个标志,并检查它是否在整个 for 循环之后仍未设置。

Boolean valid = false;
for(int i=0; i<orderProduct.length; i++)
{
    if(userOrder.equals(orderProduct[i].code))
    {
        System.out.print("Enter Amount: ");
        userQuantity = in.nextInt();
        valid = true;
        break;
    }

}
if(!valid){
        System.out.println("Sorry, invalid order.");
}
于 2012-12-27T08:22:39.937 回答
0

除了使用标志之外,您还可以使用标签。

FOUND: {
  for(OrderProduct op: orderProduct) {
    if(userOrder.equals(op.code)) {
        System.out.print("Enter Amount: ");
        userQuantity = in.nextInt();
        break FOUND;
    }
  }
  System.out.println("Sorry, invalid order.");
}

或者您可以将循环移动到方法中并使用 return 而不是 break。

然而,看起来你真正想要的是一张地图。

// use a map instead of a collection or an array.
Map<String, OrderProduct> map = new LinkedHashMap<>();
for(OrderProduct op: orderProduct) map.put(op.code, op);

OrderProduct op = null;
while(op == null) {
  System.out.print("Enter Order: "); 
  String userOrder = in.next();
  OrderProduct op = map.get(userOrder);
  if (op == null) {
    System.out.println("Sorry, invalid order.");
  } else {
    System.out.print("Enter Amount: ");
    userQuantity = in.nextInt();
  }
}
于 2012-12-27T08:55:21.847 回答
0

在内部使用break 分支语句else,而不是在if. 或者将循环更改为while您当前在else块中具有的停止条件。

于 2012-12-27T08:23:44.627 回答
0

尝试这个:

boolean invalidOrder = false;
do
{
    System.out.print("Enter Order: "); 
    userOrder = in.next();

    for(int i=0; i<orderProduct.length; i++)
    {
        if(userOrder.equals(orderProduct[i].code))
        {
            System.out.print("Enter Amount: ");
            userQuantity = in.nextInt();
        }
        else
        {
            invalidOrder = true;
        }
    }
}
while(!userOrder.equals("0"));

if(invalidOrder)
    System.out.println("Sorry, invalid order.");
于 2012-12-27T08:23:59.077 回答
0

尝试设置打印整个内容的条件

do
{
System.out.print("Enter Order: "); 
userOrder = in.next();

boolean found = false;

for(int i=0; i<orderProduct.length; i++)
{
    if(userOrder.equals(orderProduct[i].code))
    {
        System.out.print("Enter Amount: ");
        userQuantity = in.nextInt();
        found = true;
        break;
    }
}
if(!found)
    System.out.println("Sorry, invalid order.");
}
while(!userOrder.equals("0"));
于 2012-12-27T08:24:48.543 回答
0

你可以尝试这样的事情,我知道问题不是关于地图的,但你也可以对数组做同样的事情。

public class TestClass {

    public static void main(String[] args) {
        Map<String, String> cookieMap = new HashMap<String, String>();
        Set<Map.Entry<String, String>> cookieSet = null;

        cookieMap.put("A", "1");
        cookieMap.put("B", "2");
        cookieMap.put("C", "3");
        cookieMap.put("D", "4");
        cookieMap.put("E", "5");

        cookieSet = cookieMap.entrySet();
        Boolean valid = false;
          for (Map.Entry<String, String> cookieKeyValue : cookieSet) {
              if(cookieKeyValue.getKey().contains("H")){
                  System.out.println(cookieKeyValue.getValue());
                  System.out.println("True");
                  valid = true;
                  break;
              }
          } if (!valid) {
              System.out.println("False");
          }
     }
}
于 2017-04-27T15:56:09.400 回答