2017-03-28 11 views
0

リストには、ユーザ入力に応じて追加するリストがあります。例えば、 "LMO"と入力すると、大きなピザ、モッツァレラ、オリーブがリストに追加されます。私が "MHMO"とタイプすると、Medium Pizza、Ham、Mozzarella、Olivesがリストに追加されます。ループのために、このようなJava最初のforループの後に文字列を追加する

Large pizza with mozzarella, olives, £8.90

としてフォーマットザ・にリストを出力します

今、私はforループを使用するには、リストの内容を印刷することができますが、どのように私はwith文字列を追加します最初のループの終了後。それはtheresのリストで唯一の3項目を想定しています現時点では

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)); 
     } 
    } 
} 

が、それは変えることができる:

現在、私のコードです。何が私のアプローチになるので、forループのインクリメント+ with文字列を使用することができます。

+0

これはそれが得ることができるほど単純ではあるがあなたは(https://docs.oracle.com/javase/tutorial/java/data/buffers.html) –

答えて

0

toStringメソッドをオーバーライドしてcreataピザクラスを作成することもできます。

しかし、それを簡単に保つために、私はあなたが私に提供したものに基づいて答えます。 これは最適な解決策ではありませんが、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 
+0

を[のStringBuilderクラス]を見てみる必要があります、変更された唯一の部分(私のメインコードから紛失)は、ユーザーが「M」または「L」(中または大)だけを入力した場合、「トッピングなしのミディアムピッツァ」を印刷する必要があります。その部分は編集されます。編集:Nevermindは、追加する必要があります。if文 –

+1

うん。私はサイズのためにM/Lをしなかった。あなたが投稿した元のコードではありませんでした。私はそれがあなたの問題を解決するのを助けたと思った;) – kkflf

0

まず、あなたの例では、ループは全く役に立たない。あなたは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)); 
    } 
0

私はピザのサイズとトッピングのためのキーと値のペアを作成するために地図を使用します。これにより、メニューからトッピングを追加/削除する柔軟性が向上します。私は同様に価格をピザのサイズとトッピングにマッピングしますが、元のポスターの練習として残します。

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()); 
} 
0

これには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()); 
} 
関連する問題