2

そのため、ユーザーは 1 から 3 までの数字を選択する必要があります。そうでない場合は、再試行するように指示されます。ユーザーが 1 未満または 3 より大きい数値を試行すると、選択した数値が "choice" 変数に格納され、停止する必要があるときにプログラムが実行され続けます。簡単な解決策があると思っていましたが、どうやら初心者の私を超えているようです。私にとって明らかなことは、ユーザー入力が失敗した後、「選択」に割り当てられた値を何らかの方法でクリアまたは空にすることです。それは可能ですか?

import java.util.Scanner;

public class Furniture2Test  {

    public static void main(String[] args) {

        wood();

    } // end main

    public static void wood() {

        int choice;

        int pine = 1;
        int oak = 2;
        int mahogany = 3;

        int pineCost = 100;
        int oakCost = 225;
        int mahoganyCost = 310;

        Scanner keyboard = new Scanner(System.in);

        System.out.println("What type of table would you like?");
        System.out.println("1. pine");
        System.out.println("2. oak");
        System.out.println("3. mahogany");

        choice = keyboard.nextInt();

        if (choice == 1) {
            choice = pineCost;
        } else if (choice == 2) {
            choice = oakCost;
        } else if (choice == 3) {
            choice = mahoganyCost;
        } else if (choice > 3 || choice < 1) {
            System.out.println("Try again.");
            choice = -1;
            wood();
        }

        System.out.println("That will be $" + choice + ".");

        size(choice);

    } // end wood

    public static void size(int choice) {

        int sizeChoice;
        int large = 35;

        Scanner keyboard = new Scanner(System.in);

        System.out.println("What size will that be?");
        System.out.println("1. large");
        System.out.println("2. small");

        sizeChoice = keyboard.nextInt();

        if (sizeChoice == 1)
            System.out.println("That will be $" + (choice + large) + ".");
        else if (sizeChoice == 2)
            System.out.println("That will be $" + choice);
        else
            System.out.println("Please, enter either a 1 or a 2.");

    } // end size

}
4

5 に答える 5

0
import java.util.Scanner;

public class Furniture2Test

{

   public static void main(String[] args)
   {

      wood();

   } // end main


   public static void wood()
   {

      int choice;

      int pine = 1;
      int oak = 2;
      int mahogany = 3;

      int pineCost = 100;
      int oakCost = 225;
      int mahoganyCost = 310;

      Scanner keyboard = new Scanner(System.in);

      System.out.println("What type of table would you like?");
      System.out.println("1. pine");
      System.out.println("2. oak");
      System.out.println("3. mahogany");

      choice = read_range(keyboard, 1, 3);

      if(choice == 1)
      {
         choice = pineCost;
      }
      else
         if(choice == 2)
         {
            choice = oakCost;
         }
         else
            if(choice == 3)
            {
               choice = mahoganyCost;
            }
            else
               if(choice > 3 || choice < 1)
               {
                  System.out.println("Try again.");
                  choice = -1;
                  wood();
               }

      System.out.println("That will be $" + choice + ".");

      size(choice);


   }  // end wood

   public static void size(int choice)
   {

      int sizeChoice;
      int large = 35; 

      Scanner keyboard = new Scanner(System.in);

      System.out.println("What size will that be?");
      System.out.println("1. large");
      System.out.println("2. small");

      sizeChoice = read_range(keyboard, 1, 2);

      if(sizeChoice == 1)
         System.out.println("That will be $" + (choice + large) + ".");
      else
         if(sizeChoice == 2)
            System.out.println("That will be $" + choice);
         else
            System.out.println("Please, enter either a 1 or a 2.");

   } // end size

   private static int read_range (Scanner scanner, int low, int high) {
     int value;
     value = scanner.nextInt();
     while (value < low || value > high) {
       System.out.print("Please enter a value between " + low + " and " + high + ": ");
       value = scanner.nextInt();
     }
     return value;
   }



} // end class
于 2013-09-25T22:23:05.813 に答える
0
//put the menu logic
while(choice > 3 || choice < 1) {
    //put your try again logic.
}
//can only exit the while loop if the number is 1, 2, or 3, so put your output statement down here after the while loop
于 2013-09-25T22:20:31.183 に答える
0

彼らが選んだ数字は「choice」変数に格納され、停止すべきときにプログラムを実行し続けます//

wood() if(choice > 3 || choice < 1) を呼び出しているため、プログラムは引き続き実行されます。

停止したい場合は、wood() 呼び出しを削除します

選択の値も(-1ではなく)クリアしたい場合は、それをnullに割り当てることができます

于 2013-09-25T22:26:14.230 に答える
0

choiceメソッド wood のローカル変数ですwood。ユーザーが間違った選択をしたときに再帰呼び出しを行っています。これは興味深い設計上の選択であり、おそらくこの場合は最適ではありません。

再度呼び出すwoodと、選択肢は残ります (これでは、ユーザーから値が割り当てられるまで未知の値になります)。

ここで、メソッドが存在するときに問題が発生しwoodます...呼び出し元に戻るたびに、 が呼び出されますsize(choice)(これchoice-1、wood を再度呼び出す前に設定されているためです)。

  1. while-loop再帰呼び出しの代わりにa を使用する必要があります
  2. size(choice)有効な選択肢以外で呼び出してはいけません

詳細については、while および do-while ステートメントを参照してください。

于 2013-09-25T22:26:28.593 に答える