2016-11-20 8 views
-5

私はJavaを数週間しか学んでいないので、あなたの多くがこの問題を解決することが大変簡単です。それは私の脳をスクランブルしています。ここで基本的なJavaの練習 - 助けが必要

「オンラインブックデポは5冊以上の本をご購入いただくとプレミアム顧客に1冊の無料の本を提供していますし、8冊以上の本をご購入いただくと2冊の無料の書籍を提供しています命令です。 それは定期的にお客様に付き1冊の無料の本を提供しています12冊以上の書籍を購入するたびに2冊の無料書籍を提供する ブール変数isPremiumCustomerとint変数nbooksPurchased "の値に基づいて、freeBooksに適切な値を割り当てるコードブロックを記述する

コードはエラーなしでコンパイルされますが、結果は間違っています...ヘルプ!

boolean isPremiumCustomer = false; 
    int freeBooks = 0; 
    Scanner scanner = new Scanner(System.in); 
    System.out.println("Enter the no of books:"); 
    int nbooksPurchased = scanner.nextInt(); 
    System.out.println("is Premium customer?(y/n):"); 
    String ans = scanner.next(); 
    if (ans.equals("y") || ans.equals("Y") && (nbooksPurchased >4 && (nbooksPurchased <8))) { 
     isPremiumCustomer = true; 
     freeBooks = 1; 
    }else if (ans.equals("y") || ans.equals("Y") && (nbooksPurchased >=8)) { 
     isPremiumCustomer = true; 
     freeBooks = 2; 
    }else if (ans.equals("n") || ans.equals("N") && (nbooksPurchased >=7 && (nbooksPurchased <=11))) { 
     freeBooks = 1; 
    }else if (ans.equals("n") || ans.equals("N") && (nbooksPurchased >=12)){ 
     freeBooks = 2; 
     } 
     System.out.println("Free Books:" + freeBooks); 
+0

定義する*「結果が正しくありません」*。入力と(誤った)出力は何ですか?また、デバッガを使用して最初に実行する必要があります。最後に、フローを少し変更しようとお勧めします。入力のチェックを 'nbooksPurchased'のチェックから分離してください。 – UnholySheep

+1

あなたのコードをデバッグして、期待していたものと違うところを確認しようとしましたか? – n247s

+1

期待した結果は何ですか?あなたが得た結果は何ですか? –

答えて

1

コメントに独自のコードを読み込もうとしている場合、私はあなたの欲求不満を理解しています。 ;-)それはほとんどできません。あなたはあなたの質問を編集し、そこに新しい書式のコードを入れることができます。フォーマットすると、次のようになります。

if (ans.equals("y") || ans.equals("Y")) { 
     isPremiumCustomer = true; 
    } 
    if (nbooksPurchased >= 3 && (nbooksPurchased <= 7)) { 
     freeBooks = 1; 
    } else if (nbooksPurchased >= 8) { 
     freeBooks = 2; 
    } 
    if (ans.equals("n") || ans.equals("N")) { 
     if ((nbooksPurchased >= 7 && (nbooksPurchased <= 11))) { 
      freeBooks = 1; 
     } else if (nbooksPurchased >= 12) { 
      freeBooks = 2; 
     } 
    } 

今、あなたは明らかに途中です!これの主な問題は、中間のif-else構文if (nbooksPurchased >= 3 && (nbooksPurchased <= 7)) {がプレミアム顧客だけでなく、すべての顧客に対して実行されることです。だから、3か6冊の本を買う正規の顧客は、プレミアム顧客だけがそのような購入をしていたはずの1冊の無料本を手に入れます。彼らが7以上購入すると、実行はif (ans.equals("n") || ans.equals("N")) {になり、あなたは保存されます。

もう1つの問題は、単にタイプミスで、nbooksPurchased >= 3はプレミアム顧客のために5だったはずです。

ほとんどのケースが正しく動作すると思います。

はブロックを書く:また、私は、これは、より良い要件を満たすだろうと思い

if (isPremiumCustomer) { 
     // put if-else for premium customers here 
    } else { 
     // put if-else for regular customers here 
    } 

は、私は、これは(自分でのエラーを修正するために、したがって、より簡単に)明確になると思いますfreeBooksに適切な値を割り当てるコード に基づいて、ブール変数の値は、プレミアム顧客となります。

(私の強調)あなたが成功してくれることを願っています。

関連する問題