【问题标题】:Java Adding Strings after end of first for loopJava在第一个for循环结束后添加字符串
【发布时间】:2017-03-28 11:42:21
【问题描述】:

我有一个列表,根据用户输入附加,例如,如果我输入 “LMO”它将大比萨、马苏里拉奶酪和橄榄添加到列表中。如果我输入“MHMO”,它会将中号披萨、火腿、马苏里拉奶酪和橄榄添加到列表中。

现在我想使用 for 循环,它将以如下格式打印列表

Large pizza with mozzarella, olives, £8.90

for 循环可以打印列表的内容,但我如何在第一个循环结束后添加with 字符串。

目前我的代码是:

    for(int l = 0; l < words.size(); l++) {

        if (words.size() == 1) {
            System.out.println(words.get(l) + " with no toppings "+ "£"+String.format("%.2f", total));
        }
        else {
            System.out.println(words.get(0) + " with " + words.get(1) + ", "  + words.get(2) +  ", "+ "£" + String.format("%.2f", total));
        }
    }
}

目前假设列表中只有 3 个项目,但它可能会有所不同。我的方法是什么,所以我可以使用 for 循环增量 + 使用 with 字符串。

【问题讨论】:

标签: java list for-loop


【解决方案1】:

您可以为此使用StringBuilder

public static void print(ArrayList words, double total){
    StringBuilder str = new StringBuilder();
    if (words.size() == 1) {
        System.out.println(words.get(0) + " with no toppings "+ "£"+String.format("%.2f", total));
    }else if(words.size() > 1){
        for(int l = 0; l < words.size(); l++) {
            str.append(words.get(l));
            if(l==0){
                str.append(" with ");
            }else{
                str.append(", ");
            }
        }
        str.append("£");
        str.append(String.format("%.2f", total));
    }
     System.out.println(str.toString());
}

【讨论】:

    【解决方案2】:

    您可以在覆盖 toString 方法时创建比萨饼类。

    但为了简单起见,我将根据您提供给我的内容来回答。 这不是最好的解决方案,使用 StringBuilder 会更好,但让我们保持简单。您正在寻找的只是一个简单的循环;)

    List<String> words = new ArrayList<String>();
    words.add("Large pizza");
    words.add("mozzarella");
    words.add("pepperoni");
    words.add("olives");
    double total = 8.9;
    
    String order = "";
    
    if(words.size()>1){
        order = words.get(0) + " with ";    
        for(int i = 1; i < words.size(); i++){
            order += " " + words.get(i) + ", ";
        }
        order += "£"+String.format("%.2f", total);
    }
    
    System.out.println(order);
    

    输出:

    Large pizza with  mozzarella,  pepperoni,  olives, £8.90
    

    【讨论】:

    • 虽然这很简单,但唯一修改的部分(我的主代码中缺少)是;如果用户只输入“M”或“L”(Medium 或 Large),它应该打印“Medium Pizza with no toppings”;那部分被删掉了。编辑:没关系只需要添加和 else if 语句
    • 是的。我没有为尺寸做 M/L。它不在您发布的原始代码中。我希望它能帮助你解决你的问题;)
    【解决方案3】:

    首先,在您的示例中,循环非常无用。

    要回答您的问题,如果您有 X 个配料并且数组的第一个元素始终是披萨大小,那么您可以简单地将索引 1 循环到表的末尾:

        if(words.size()>1){
            StringBuffer buf = new StringBuffer(words.get(0));
            buf.append(" with ");
            for(int i=1;i<words.size();i++){
                buf.append(words(i)).append(", ");
            }
            buf.append(", £").append(String.format("%.2f", total));
        }
    

    【讨论】:

      【解决方案4】:

      我会使用 Map 为披萨大小和配料创建键值对。这使您可以更灵活地从菜单中添加/删除浇头。我会类似地将价格映射到比萨饼的大小和配料,但我会将其作为原始海报的练习。

      public static void main(String[] args) throws IOException
      {
      
          HashMap<Character, String> sizeMap = new HashMap<>();
          sizeMap.put('S', "Small");
          sizeMap.put('M', "Medium");
          sizeMap.put('L', "Large");
          sizeMap.put('X', "Extra Large");
      
          HashMap<Character, String> toppingsMap = new HashMap<>();
          toppingsMap.put('H', "Ham");
          toppingsMap.put('P', "Pepperoni");
          toppingsMap.put('M', "Mozzarella");
          toppingsMap.put('O', "Olives");
      
      
          String words = "LHMO";
      
          char pizzaSize = words.charAt(0);
          String pizzaToppings = words.substring(1);
      
      
          StringBuilder sb = new StringBuilder();
      
          sb.append(sizeMap.get(pizzaSize));
      
      
          if (pizzaToppings.length() == 0) {
              sb.append(" with no toppings ");
          } else {
              sb.append(" with ");
              for (int i = 0; i < pizzaToppings.length(); i++) {
                  sb.append(toppingsMap.get(pizzaToppings.charAt(i)) + " ");
              }
          }
      
          System.out.println(sb.toString());
      }
      

      【讨论】:

        猜你喜欢
        • 2013-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-15
        • 2013-08-07
        • 2013-03-07
        • 1970-01-01
        相关资源
        最近更新 更多