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