java 有没有可能简化这些嵌套循环?

2vuwiymt  于 2023-03-16  发布在  Java
关注(0)|答案(1)|浏览(93)

我正在为我的学校项目创建一个购物车管理器,有一个从购物车中删除物品的方法。

public String removeItem(String itemName) {
            String removeOutput = "Something is wrong";
            int CAPACITY = 10;
            ShoppingCartManager SCM = new ShoppingCartManager();
            System.out.println("Enter name of the item:");
            itemName = SCM.input.nextLine();
            for(int i=0; i < CAPACITY; i++) {
                if(itemNames[i] != null) {
                    if(itemNames[i].equals(itemName)) {
                        itemNames[i] = null;
                        costs[i] = 0;
                        for(int j=0; j < CAPACITY; j++) {
                            if(cartItems[j].toString().contains(itemName)) {
                                for(int k = 0; k < quantities[i]; k++) {
                                    cartItems[j + k] = null;
                                }
                                break;
                            } 
                        }
                        quantities[i] = 0;
                        removeOutput = ("["+itemName+"] is removed from your shopping cart. ");
                        break;
                    } else {
                        removeOutput = ("["+itemName+"] not found in cart. ");
                    }
                }
                
            }
            return removeOutput;
        }

这是我所能做的最好的结果,正如预期的那样,我只是好奇是否有可能简化方法中的超长嵌套循环。

iezvtpos

iezvtpos1#

您还可以使用保护子句来“取消嵌套”嵌套的if语句。在这里,您可以指定跳过数据的条件,而不是指定继续处理数据所需的条件

if(itemNames[i] != null) {
    if(itemNames[i].equals(itemName)) {
        //... more nested loops etc.
    }
}

可提取用于:

if(itemNames[i] == null) {
    return;  //or break/continue depending if its inside a loop or a function
}
//other guard clause if statements
if(itemNames[i].equals(itemName)) {
    //... processing
}

当然,如果嵌套了更多的if条件,那么可以将它们全部提取出来,以使其更具可读性。
至于嵌套的for循环,这取决于你对处理数据结构的过程的认识程度。你能在一个for循环中完成它吗?你能把其中一个循环提取到一个方法中并调用它,这样即使它仍然是一个嵌套的for循环,代码看起来也更可读吗?

相关问题