2017-01-17 10 views
1

私は、書籍ストアのプログラムを作成してビジネスの見積もりに役立てることを約束しています。そのためには、本書のコード、書籍の単価、現在の書籍数、予定されているクラスの登録など、あらゆる種類のインプットをユーザーに尋ねることを想定しています。しかし、私は、ユーザーが入室予定のエントリが無効な場合など、ユーザーが無効なエントリを入力したときに問題に直面しています。Javaでスキャナを使用する際の問題

誰かが私が間違っていることを知るのを助けることができますか?ここに私のコードです。

ありがとうございます。

-Aayush

public static void main(String[] args) { 

    Scanner sc = new Scanner(System.in); 

    System.out.println("Welcome to College Store Sale Class."); 
    System.out.println("Please enter all the info below as asked."); 
    System.out.println("Write either 'Continue' or 'Exit' to continue or exit program respectively. "); 



    double bookCost; 
    int bookAvailable; 
    String ending = sc.next(); 
    int prosepectiveEnrollment; 
    String rOrO;  
    String nOrU; 

    while(!ending.equals("exit")){ 



     System.out.print("Please enter the cost of book ($>=0). "); 
     bookCost = sc.nextDouble(); 

     if(bookCost >= 0){ 

      System.out.print("Please enter the number of books available (n>=0). "); 
      bookAvailable = sc.nextInt(); 

      if(bookAvailable >= 0){ 

       System.out.print("Please enter prospective class enrollement > 0: ");     
       prosepectiveEnrollment = sc.nextInt(); 

       if(prosepectiveEnrollment > 0){ 

        System.out.print("Is the book Required or Optional (ignoreCase)? "); 
        rOrO = sc.next(); 

        if((rOrO.equalsIgnoreCase("Required") || rOrO.equalsIgnoreCase("Optional"))){ 

         System.out.print("Is the book New or Used? Enter in 'N' or 'U' format. "); 
         nOrU = sc.next(); 
         if((nOrU.equalsIgnoreCase("New") || nOrU.equalsIgnoreCase("Used"))){ 

          System.out.println("Thanks for correct info, below is your result"); 

         } 

         else{ 

          System.out.println("(E) Please enter either 'New' or 'Used'. "); 
         } 

        } 
        else{ 

         System.out.println("(D) Please enter either 'Required' or 'Optional'. "); 
        } 

       } 
       else{ 

        System.out.println("(C) Number of prospective class enrollement must be > 0."); 
       } 
      } 
      else{ 

       System.out.println("(B) Number of books should be >= 0."); 
      } 

     } 

     else{ 

      System.out.println("(A) Cost should be >= 0. "); 
     } 
    } 

    if(ending.equalsIgnoreCase("exit")) 
     System.out.println("See ya later..!! Bbyee.."); 
    sc.close(); 
} 
+0

'私はのために働くなら、私に知らせてユーザーが無効な入力を入力したときに直面する問題、誰かが私が間違っていることを見つけ出すのを助けることができるかどうか、私たちは問題を知らないとき何が間違っているか教えてくれません。 – SomeJavaGuy

+1

ユーザが「int」の代わりに「A」を入力した場合、例外がメインからスローされるはずです。それはあなたが見ているものですか? – Scovetta

+0

@Scovettaいいえ、言えば '書籍の費用を入力してください($> = 0)。 ** 1 ** ' '利用可能な書籍の数を入力してください(n> = 0)。 ** 1 ** ' '予定されているクラスの登録を入力してください> 0:** - 1 ** ' ' _(C)予定クラスの登録数は> 0_ でなければなりません。 $> = 0)。 ' 繰り返しのパターンはここにありますか?ユーザーが将来の登録について無効なエントリを持っている場合、同じ質問をするのではなく、再び発生してはならない本のコストを再度入力するよう求めます。 – Aayush

答えて

0

運のベストは、あなたがこのようにそれを行うことができますこと、これはあなたが

public class Questionaire { 

    public static void main(String[] args) { 

     double bookCost = 0.0; 
     int bookAvailable = 0; 
     int prosepectiveEnrollment = 0; 
     String rOrO = "";  
     String nOrU = ""; 

     try (Scanner sc = new Scanner(System.in)){ 
      System.out.println("Welcome to College Store Sale Class."); 
      System.out.println("Please enter all the info below as asked."); 
      System.out.println("Write either 'Continue' or 'Exit' to continue or exit program respectively. "); 

      String ending = sc.next(); 
      System.out.println("Your response "+ending); 

      while(!ending.equalsIgnoreCase("exit")){ 

       bookCost = promptQuestion("Please enter the cost of book ($>=0).", param -> { 
        return param >= 0; 
       }, bookCost,sc); 
       System.out.println("Your response "+bookCost); 

       bookAvailable = promptQuestion("Please enter the number of books available (n>=0). ", param -> { 
        return param >= 0; 
       }, bookAvailable, sc); 
       System.out.println("Your response "+bookAvailable); 

       prosepectiveEnrollment = promptQuestion("Please enter prospective class enrollement > 0: ", param -> { 
        return param > 0; 
       }, prosepectiveEnrollment, sc); 
       System.out.println("Your response "+prosepectiveEnrollment); 

       rOrO = promptQuestion("Is the book Required or Optional (ignoreCase)? ", param -> { 
        return param.equalsIgnoreCase("Required") || param.equalsIgnoreCase("Optional"); 
       }, rOrO, sc); 
       System.out.println("Your response "+rOrO); 

       nOrU = promptQuestion("Is the book New or Used? Enter in 'N' or 'U' format. ", param -> { 
        return (param.equalsIgnoreCase("New") || param.equalsIgnoreCase("Used") 
          || param.equalsIgnoreCase("N") || param.equalsIgnoreCase("U")); 
       }, nOrU, sc); 
       System.out.println("Your response "+nOrU); 

       System.out.println("Write either 'Continue' or 'Exit' to continue or exit program respectively. "); 
       ending = sc.next(); 
       System.out.println("Your response "+ending); 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    static Integer promptQuestion(String question, Validation<Integer> validation, Integer input, Scanner sc) { 
     do { 
      System.out.println(question); 
      input = sc.nextInt(); 
     } while(!validation.validate(input)); 
     return input; 
    } 

    static Double promptQuestion(String question, Validation<Double> validation, Double input, Scanner sc) { 
     do { 
      System.out.println(question); 
      input = sc.nextDouble(); 
     } while(!validation.validate(input)); 
     return input; 
    } 

    static String promptQuestion(String question, Validation<String> validation, String input, Scanner sc) { 
     do { 
      System.out.println(question); 
      input = sc.next(); 
     } while(!validation.validate(input)); 
     return input; 
    } 

    @FunctionalInterface 
    private static interface Validation<T> { 
     boolean validate(T t); 
    } 
} 
+0

答えをいただきありがとうございますが、これはイントロクラスであるため、まだ詳細には学んでいないので、やったことがないと思います。たとえば、Validation の検証が意味するものについては検討していません。 – Aayush

0

あなたは、ループ内の質問を求めています。あなたの条件の1つが失敗すると、プログラムはすべての後続の条件(それらも間違っている場合)を過ぎてから、LOOPを再び開始します。これを修正するには、ループ内で各条件が発生する可能性があります。

(偽条件が答え)しながら、ような何か: は、自分自身に挑戦するために再び

問合せ(及び改善)、できるだけ数行のコードをキープ!あなたのコーディングの旅:)私はこの問題を解決することを試みた

+0

これは私が最初にやったことです。入れ子のwhileループを使用しましたが、動作しません。入れ子にされたwhileループのスクリーンショットを見せてもらえますが、添付ファイルボタンが見つからないのでここに写真を投稿する方法はわかりません。 – Aayush

関連する問題