2017-12-03 12 views
1

ユーザーが入力した金額の値を格納するコードを記述しました。プログラムがユーザに「y/n項目を入力しますか?ユーザーはArrayListに格納された値を入力できます。Whileループ中にネストされたArrayListの値をリセット

最初のプロンプトは次のとおりです。私は目に見えるエラーがなくても値を入れることができるので、うまくいくようです。

System.out.print("Would you like to input item/s - y/n: "); 
    String response = textReader.nextLine(); 
    System.out.println(); 
    // create while loop to restrict responses to single characters 
    while ((!response.equalsIgnoreCase("y")) && (!response.equalsIgnoreCase("n"))) 
    { 
     System.out.print("Sorry - we need a y/n: "); 
     response = textReader.nextLine(); 
     System.out.println(); 
    } 

しかし、2回目に値を入力すると、最初のエントリの値がクリアされないことがわかります。ユーザーに別の値のクラスターを要求するために書いたコードは、最初のプロンプトで書いたコードと同じです。私は、ユーザーが最初のプロンプトに "y"を選択したことを契機として、これらの2番目のプロンプトを入れ子に入れました。

while ((response.equalsIgnoreCase("y"))) 
    { 
     System.out.print("Please enter an item price, or -1 to exit: $"); 
     double values = numberReader.nextDouble(); 
     while ((values > (-1))) 
     { 
      cartItems.add(values); 
      System.out.print("Please enter another item price, or -1 to exit: $"); 
      values = numberReader.nextDouble(); 
     } 
     System.out.println(); 
     System.out.println("********** Here are your items **********"); 

     // I omitted the code here to make this more concise. 

     // prompt the user to input a second round of values 
     System.out.print("Would you like to input item/s - y/n: "); 
     response = textReader.nextLine(); 
     System.out.println(); 
     // create while loop to restrict responses to single characters 
     while ((!response.equalsIgnoreCase("y")) && (!response.equalsIgnoreCase("n"))) 
     { 
      System.out.print("Sorry - we need a y/n: "); 
      response = textReader.nextLine(); 
      System.out.println(); 
     } 
    } 

私の出力は以下の通りです。 2回目のメッセージが表示されたら、「y」を選択してアイテムを追加します。しかし、新しく追加された$ 3.00のアイテムは、最初のプロンプトからリストに追加されます。 ArrayListをリフレッシュまたは消去して、新しい値を入力するたびにまったく新しいものになるようにしていますか? My output

答えて

2
cartItems.clear(); 

結果がコンソールに出力された後、ループの最後にそれを置きます。 リストを更新し、リスト内のすべての要素を削除します。

1

だから今、毎回ユーザーが[はい]を選択すると、プログラムはwhileループに入り、その後、リストの新しいインスタンスを任意の値なしで作成され、whileループで

List<Double> cartList = new ArrayList<Double>(); 

をリストのインスタンスを作成します。前のリストに値を保存する場合は、リストの新しいインスタンスを作成する前に、ファイルまたはデータベースなどの永続ストレージに書き込みます。

また、あなたも、私はso.Itはあなたジャンク値を与えると時間のより多くの量を取ることができますやってお勧めしません、

cartList.clear(); 

を使用することができますが。 clearメソッドは、基本的にlistのすべての要素を繰り返し処理し、nullのようにします。

for(int i = 0; i < cartList.size(); i++){ 
    cartList.get(i) = null; 
} 
3

ArrayListはリセットされません。

処理が完了し、次のラウンド(アウトターの最下部)でループしているときはcartItems.clear()に電話をかけることができます。

 ... 
     while ((!response.equalsIgnoreCase("y")) && (!response.equalsIgnoreCase("n"))) 
     { 
      System.out.print("Sorry - we need a y/n: "); 
      response = textReader.nextLine(); 
      System.out.println(); 
     } 
     cartItems.clear(); 
    } 
関連する問題