2016-10-14 7 views
-3

私はこのコードを持っていて、私の人生の中でなぜそれが正しくループしていないのか理解しておらず、製品の量を合計するとwhileループの最初のステートメントだけを読み取るようですそれが引き出すデータ私は最初のwhileステートメントにループし続けるのではなく、同じフレーズで上記のメニューから別の項目を入力してください: "助けていただければ幸いです。このメニューのこのコードを終了しようとしていますが、なぜ正しくループしないのかわかりません。

import java.util.Scanner; 
public static void main(String[] args) {  //Declare Variables 

    Scanner input = new Scanner(System.in); 
    int nProduct = 0;   //Stores the value entered by the user 
    int nPrice = 0;    //Stores sum of values entered 
    int nCount = 0; 
    int nSum = 0; 
    double dTax = 0.0; 
    double dTotal = 0.0; 

    final int SENTINEL = 10; //Used to end loop 
    final double TAX = .065; 


    System.out.print("Please enter the your name: "); 
     String sName = input.nextLine(); 

    System.out.println(""); 

    System.out.println("BEST PURCHASE PRODUCTS: "); 
    System.out.println("1. Smartphone   $249"); 
    System.out.println("2. Smartphone Case  $39"); 
    System.out.println("3. PC Laptop   $1149"); 
    System.out.println("4. Tablet    $349"); 
    System.out.println("5. Tablet Case   $49"); 
    System.out.println("6. eReader    $119"); 
    System.out.println("7. PC Desktop   $889"); 
    System.out.println("8. LED Monitor   $299"); 
    System.out.println("9. Laser Printer  $399"); 
    System.out.println("10.Complete my order"); 

    while (nProduct != SENTINEL) { 
     nSum = nPrice + nSum; 
     nCount++; 
     System.out.print("Please enter item from the menu above: "); 
     nProduct = input.nextInt(); 

     if (nProduct == 1) { 
      nPrice += 249; 
      System.out.print("Please enter another item from the menu above: "); 
      nProduct = input.nextInt(); 
     } 

     else if (nProduct == 2) { 
      nPrice += 39; 
      System.out.print("Please enter another item from the menu above: "); 
      nProduct = input.nextInt(); 
     } 

     else if (nProduct == 3) { 
      nPrice += 1149; 
      System.out.print("Please enter another item from the menu above: "); 
      nProduct = input.nextInt(); 
     } 

     else if (nProduct == 4) { 
       nPrice += 349; 
       System.out.print("Please enter another item from the menu above: "); 
      nProduct = input.nextInt(); 
     } 

     else if (nProduct == 5) { 
      nPrice += 49; 
      System.out.print("Please enter another item from the menu above: "); 
      nProduct = input.nextInt(); 
     } 

     else if (nProduct == 6) { 
      nPrice += 119; 
      System.out.print("Please enter another item from the menu above: "); 
      nProduct = input.nextInt(); 
     } 

     else if (nProduct == 7) { 
      nPrice += 899; 
      System.out.print("Please enter another item from the menu above: "); 
      nProduct = input.nextInt(); 
     } 

     else if (nProduct == 8) { 
      nPrice += 299; 
      System.out.print("Please enter another item from the menu above: "); 
      nProduct = input.nextInt(); 
     } 

     else if(nProduct == 9) { 
      nPrice += 399; 
      System.out.print("Please enter another item from the menu above: "); 
      nProduct = input.nextInt(); 
     } 
    }  

    dTax = (nPrice * TAX); 
    dTotal = dTax + nPrice; 

    System.out.println(""); 
    System.out.println("Thank you for ordering with Best Purchase,"+sName); 
    System.out.println("Total Items Ordered: " + nCount); 
    System.out.println("Price of items ordered: $" + nSum); 
    System.out.println("Sales Tax: $" + dTax); 
    System.out.println("Total amount due: $" + dTotal); 
} 
+2

JavaとJavaScriptはまったく異なる言語です。 –

答えて

0

私はフランクに同意しますが、nSumはここで正しく出てこないようです。各ステートメントで

の代わりに...

nPrice += xxx; 

...あなたは単に置くべきです

nSum += xxx; 

そして、合計をもう一度評価しないようにしてください。今のところ、nPriceの価値は絶えず高まっています。別のオプションは、各if文にnPriceを設定し、ループの上部または下部でnSumを評価することです。

nPrice = xxx; 

実際にアイテムを読む前にnCount ++を処理しているため、追加のカウントも取得しています。意味は、 "10"を入力して終了すると、既にアイテムが追加されています。

あなたはこのようなことを試すことができます。それは乱雑で、5分かかりましたが、おそらく最良の方法ではありませんが、それはうまくいくはずです:

System.out.print("Please enter item from the menu above: "); 
nProduct = input.nextInt() 

while (nProduct != SENTINEL) { 
    nProduct = input.nextInt() 

    if (nProduct == 1) { 
     nSum += 249; 
     System.out.print("Please enter another item from the menu above: "); 
     nCount++; 
    } 
    else if (nProduct == 2) { 
     nSum += 39; 
     System.out.print("Please enter another item from the menu above: "); 
     nCount++; 
    } 
    else if (nProduct == 3) { 
     nSum += 1149; 
     System.out.print("Please enter another item from the menu above: "); 
     nCount++; 
    } 
    else if (nProduct == 4) { 
     nSum += 349; 
     System.out.print("Please enter another item from the menu above: "); 
     nCount++; 
    } 
    else if (nProduct == 5) { 
     nSum += 49; 
     System.out.print("Please enter another item from the menu above: "); 
     nCount++; 
    } 
    else if (nProduct == 6) { 
     nSum += 119; 
     System.out.print("Please enter another item from the menu above: "); 
     nCount++; 
    } 
    else if (nProduct == 7) { 
     nSum += 899; 
     System.out.print("Please enter another item from the menu above: "); 
     nCount++; 
    } 
    else if (nProduct == 8) { 
     nSum += 299; 
     System.out.print("Please enter another item from the menu above: "); 
     nCount++; 
    } 
    else if(nProduct == 9) { 
     nSum += 399; 
     System.out.print("Please enter another item from the menu above: "); 
     nCount++; 
    } 
} 
+0

ありがとうございました。これで、すべての計算が正しいようになりました。nCountを除いて、ループを終了した後に10を入力して別の行を追加し、最後に1つカウントしてから実際に終了します。 – Nick

+0

上記のメニューから項目を入力してください:1 上記のメニューから別の項目を入力してください:10 上記のメニューから別の項目を入力してください:/ *この行は終了後に追加します* \ ベスト購入でご注文いただきありがとうございます、 注文総額:3 * /ここで数えます。\ – Nick

+0

編集されました。フランクはあなたをほとんどそこに連れて来ました。彼の解決策ははるかにエレガントです。 – dr4g1116

0

/他のビジネス場合の(a)あなたは一度だけ、それを記述する必要がありますし、(b)はそれがあっても終らなるように、あなたは、後に入力の&読み取りのための全体を迅速に移動することができますnProductに一致しませんでした。しかし、最初のプロンプト&をループの開始直前に移動する必要があります。

私はスコット・ハンターのソリューション@に同意するが、あなたはこのような何かを持っているように、プロンプトを変更するには、別の方法
0

String prompt = "Please enter item from the menu above: "; 
while (nProduct != SENTINEL) { 
    // Some code ... 
    System.out.println(prompt); 
    // ... more code 
    prompt = "Please enter another item from the menu above: "; 
} 
0

場合は、すべての

System.out.print("Please enter another item from the menu above: "); 
nProduct = input.nextInt(); 

を取る必要がありますこれはあなたの問題を解決するはずです。

基本的に、あなたはこれをやっている:

  1. は、番号を尋ね。
  2. 番号を確認し、番号を尋ねます。
  3. 番号をリクエストしてください。

文の場合は、それぞれの上記のコードを削除する場合は、

  1. 番号を尋ねことになるだろう。
  2. 番号を確認してください。
  3. 番号をリクエストしてください。
  4. 番号を確認してください。

どのようにしたいですか。

1

各ブロック内の追加のinput.nextInt()ブロックは意味を成さない。この方法で、各反復で2つの数値を入力する必要があります。

System.out.print("Please enter item from the menu above: "); 
while ((nProduct = input.nextInt()) != SENTINEL) { 
    nSum = nPrice + nSum; 
    nCount++; 
    System.out.print("Please enter another item from the menu above: "); 

    if (nProduct == 1) { 
     nPrice += 249; 
    } 
    else if (nProduct == 2) { 
     nPrice += 39; 
    } 
    else if (nProduct == 3) { 
     nPrice += 1149; 
    } 
    else if (nProduct == 4) { 
      nPrice += 349; 
    } 
    else if (nProduct == 5) { 
     nPrice += 49; 
    } 
    else if (nProduct == 6) { 
     nPrice += 119; 
    } 
    else if (nProduct == 7) { 
     nPrice += 899; 
    } 
    else if (nProduct == 8) { 
     nPrice += 299; 
    } 
    else if(nProduct == 9) { 
     nPrice += 399; 
    } 
} 

私はあなたが声明nSum = nPrice + nSum;で達成したいのかわからない:次のループでは、あなたが欲しいものを行う必要があります。これにより、すべての部分和の合計が計算されます。

+0

ループを処理する前にwhileループの項を評価するのは無意味なので、Do-Whileループも考えられます。 – dr4g1116

+0

これは素晴らしいですね、10を入力してループを終了してから余分な行を追加していただきありがとうございます。 – Nick

+0

@NicholasNPeck:いいえ、私の答えを編集して入力をループ条件に直接移動しました。読むのが少し難しいかもしれませんが、余分な出力は印刷されません。 –

関連する問題