0

switch ステートメントでループを作成しようとしています。ユーザーが 1 ~ 4 のいずれかを入力しないと、「間違ったオプションを入力しました」というメッセージが繰り返し表示されます。私はリンダのビデオに取り組んでいます。ループをどこに置くかわかりません。現在、ループさせる方法が見つかりません。それはスイッチにありますか、それともgetInputメソッドにありますか。これを行うことは可能ですか?知ってる人いたらよろしくお願いします。私はEclipse、Java 7を使用しています。

  public static void main(String[] args) {
    String s1 = getInput("Enter a numeric value: ");
    String s2 = getInput("Enter a numeric value: ");



  double result = 0;
   do  { 
           String op = getInput("Enter 1=Add, 2=Subtract, 3=Multiply, 4=Divide");
           int opInt = Integer.parseInt(op);
           switch (opInt) 
           {
             case 1:
             result = addValues(s1, s2);
             break;
           }
        } while(opInt<1 || opInt >4);

編集エラー メッセージ...

この行に複数のマーカー - opInt を変数に解決できません

  • opInt を変数に解決できません

    // 他の数学演算子の中でも addValues というメソッドがあります

    private static double addValues(String s1, String s2)
    throws NumberFormatException {
    double d1 = Double.parseDouble(s1);
    double d2 = Double.parseDouble(s2);
    double result = d1 + d2;
    return result;
    }
    
    private static String getInput(String prompt) {
    BufferedReader stdin = new BufferedReader(
            new InputStreamReader(System.in));
    
    System.out.print(prompt);
    System.out.flush();
    
    try {
        return stdin.readLine();
    } catch (Exception e) {
        return "Error: " + e.getMessage();
    }
    }
    

    編集 Tal と Quoi から提供された解決策に問題があります。Quoiを使用すると、opIntを変数に解決できないというエラーが発生します.Talでは何も起こらないためです。

だから私は次のことをしました...

String s1 = getInput("Enter a numeric value: ");
    String s2 = getInput("Enter a numeric value: ");
    String op = getInput("Enter 1=Add, 2=Subtract, 3=Multiply, 4=Divide");

//convert opInt into integer
    int opInt = Integer.parseInt(op);

    if (opInt <1 || opInt >4) // used a if statement
     {
      getInput("Enter 1=Add, 2=Subtract, 3=Multiply, 4=Divide");
     }

    double result = 0;
    {
         switch (opInt)
         {
           ...........
           ...........
         }
    }

if ステートメントを使用すると、メソッドは switch ステートメントをコールバックしますが、正しいオプションを選択した後、「You enter wrong option」と「the answer is 0.0」の出力行が表示されるため、計算は行われません。これが単純な解決策なのか、それとも何なのかわかりません。

EDIT スイッチの外側で while ループを実行しようとしました。何が起こっているのかというと、1 または 4 以外を選択すると、有効なオプションを入力したかどうかに関係なく、「1 = 加算、2 = 減算、3 = 乗算、4 = 除算を入力してください」というメッセージが再度表示されます。

do 
{
  getInput("Enter 1=Add, 2=Subtract, 3=Multiply, 4=Divide");
 } while (opInt <1 || opInt >4);

    double result = 0;
    {
       switch (opInt)
       {
           case 1:
            result = addValues(s1, s2);
            break;
             ...........
             ...........
         }
    }
4

3 に答える 3

2

ループswitch-caseの中に入れます。

do{
   String op = getInput("Enter 1=Add, 2=Subtract, 3=Multiply,  
       4=Divide");
   int opInt = Integer.parseInt(op);

   switch(opInt){
      case 1: ... break;
      case 2: ... break;
      case 3: ... break;
      case 4: ... break;
   }
}while(opInt<1 || opInt >4);
于 2013-01-19T18:56:12.013 に答える
1

ユーザーのオプションを読み取る最後の getInput 呼び出しの前後に配置します。

ル:

これは私が最初に意味したことです。

 String s1 = getInput("Enter a numeric value: ");
 String s2 = getInput("Enter a numeric value: ");

 int opInt = 0;
 do {
   String op = getInput("Enter 1=Add, 2=Subtract, 3=Multiply, 4=Divide");
   try {
     opInt = Integer.parseInt(op); 
   }catch(Exception e) {
     //whatever you need to do
   }
 } while (opInt < 1 || opInt > 4);

 switch(opInt) [...]

ここで何が起こっているか: ユーザーが 2 つの数字を入力すると、1 から 4 の間になるまでオプションを入力するよう求められます。

于 2013-01-19T18:58:16.450 に答える
0

opInt変数を変更しない場合:

while(opInt < 1 || opInt > 4)
{
    switch (opInt)
    {
        case 1:
        break;
        case 2:
        break;
        default:
    }
}
于 2013-01-19T20:21:10.703 に答える