仅在通过整个数组检查时的Else语句

时间:2012-12-27 08:20:40

标签: java loops if-statement

我希望我的程序只打印一次“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循环遍历整个数组时打印它?

6 个答案:

答案 0 :(得分:4)

您可以在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.");
}

答案 1 :(得分:0)

break内使用else branching statement,而不是if内。或者将循环更改为while,并使用else块中当前的停止条件。

答案 2 :(得分: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.");

答案 3 :(得分: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"));

答案 4 :(得分: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();
  }
}

答案 5 :(得分: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");
          }
     }
}