0

以下のメニューをドライバーから実行するのに問題があります。プログラムは実行されますが、番号を入力するまでメニューは表示されません。その後、正しく表示され、selectionが正しく読み取られますが、caseステートメントにリストされているメソッドは呼び出されません。

たとえば、「1」を入力すると、メニューは1を入力したことを認識し、「1を入力しました」というメニューを再度表示します。を呼び出す代わりにdec.getDec()、caseステートメントに従ってください。役立つヒントやアドバイスをいただければ幸いです。これは宿題であり、誰かにコードを書いてもらうつもりはありません。正しい方向に向けてください。

import java.io.IOException;
import java.io.*;
import java.util.Scanner;

public class Menu {
    Scanner scan = new Scanner(System.in); 
    int selection;

    public int GetSelection()
   {
       selection = scan.nextInt();
       return selection;
   }

    public void display()
    {

          System.out.println("Please choose an option from the following:"); 
          System.out.println("[1] Convert Decimal to Binary"); 
          System.out.println("[2] Convert Decimal to Hexadecimal"); 
          System.out.println("[3] Convert Binary to Decimal"); 
          System.out.println("[4] Convert Binary to Hexadecimal"); 
          System.out.println("[5] Convert Hexadecimal to Decimal"); 
          System.out.println("[6] Convert Hexadecimal to Binary"); 
          System.out.println("[0] Exit");

          System.out.println("\n");
          System.out.println("You entered: " + selection);
   }

}


----------------------------
import java.io.*;
import java.lang.*;
import java.util.Scanner;


public class Driver
{

    public static void main(String[] args)throws IOException {

            LineWriter lw = new LineWriter("csis.txt");
            int selection;

            Decimal dec = new Decimal();
            Binary bin = new Binary();
            Hexadecimal hex = new Hexadecimal();
            Menu menu = new Menu();


        do{ 
            menu.display();

            selection=menu.GetSelection();

            switch (selection){

            case '1':{ dec.getDec();
                      break;}
            case '2':{ dec.getHex();
                      break;}
            case '3':{ bin.getBin();
                      break;}
            case '4':{ bin.getHex();
                      break;}
            case '5':{ hex.getHex();
                      break;}
            case '6': { hex.getDec();
                      break;  }     
            //default: System.out.println("Error: Unrecognized Selection");
            //          break;

           }
        }while (selection !=0);
    }   
}
4

2 に答える 2

1

使用せずcase 'n':、使用してくださいcase n。一重引用符は必要ありません。また、JavaでのSwitchステートメントに関するこのチュートリアルを参照して、コードでこれを使用する方法を理解してください。

現在の実装の問題は、(選択変数にある)int値を(内部で対応するint値に変換されている、つまり「1」のint値はと同じではない)と比較しようとしているためです。1)。char

次のコードで違いを確認できます。

switch(selection){

case '1':
    System.out.println("Hello World from char");
    break;

case 1:
    System.out.println("Hello World from int");
    break;
}

したがって、を設定selection = 1すると、intブロックからの出力が見つかりますが、を設定selection = '1'すると、charブロックからの出力が見つかります。

Java7で実行していないことを前提としていることに注意してください


注:コードには別の問題があります。@Shadedはあなたに完璧なヒントを与えてくれました。選択変数の値を設定するためのロジックを制御がどのように流れるかを参照して考えてください。

于 2012-09-10T18:58:15.310 に答える
1

これは宿題なので、私はあなたに完全な解決策を与えることはしませんが、私はあなたがそこに着くのを手伝います...

あなたの問題はスキャナーの使用から来ています、このページの役に立つ部分はA scanning operation may block waiting for input.

それを使用すると、問題がどこにあるかを確認できるはずです。この回答についてさらにヘルプコメントが必要な場合は、私にできることがもっとあるかどうかを確認します。

于 2012-09-10T19:13:35.543 に答える