0

以下の2つの機能があるとします。選択される機能を選択するにはどうすればよいですか?

スキャナーの内容を決定するための何らかの形式のステートメントがあり、したがって機能が 1 つしかないと思います。または、関数に渡されるものになります。

    public static int questionAsk(String question)
{
    Scanner scan = new Scanner (System.in);
    System.out.print (question+"\n");
    System.out.print ("Answer: ");
    return scan.nextInt();
}
    public static String questionAsk(String question)
{
    Scanner scan = new Scanner (System.in);
    System.out.print (question+"\n");
    System.out.print ("Answer: ");
    return scan.nextLine();
}
4

2 に答える 2

1

これらのメソッドのどれを呼び出しているかをコンパイラが知る方法はありません。次のように、文字列型を別のものに変更することで、型を安全にすることができます。

    public static int questionAsk(IntQuestion question)
{
    Scanner scan = new Scanner (System.in);
    System.out.print (question.toString() +"\n");
    System.out.print ("Answer: ");
    return scan.nextInt();
}
    public static String questionAsk(StringQuestion question)
{
    Scanner scan = new Scanner (System.in);
    System.out.print (question.toString() +"\n");
    System.out.print ("Answer: ");
    return scan.nextLine();
}

そして、2 つの新しいクラスを追加します。

   public class IntQuestion extends String{
       public IntQuestion(String question){
            super(question);
       }
   }

   public class StringQuestion extends String{
        public StringQuestion(String question){
            super(question);
        }
   }

IntQuestionofを構築するときはStringQuestion、コンストラクターを呼び出した場合に String を構築するのと同じ方法で簡単に構築できます。

IntQuestion intQuestion = new IntQuestion("Some String Here");

これは、コンパイラが適切に動作し、型に基づいて正しいメソッドを選択できるようにするための、ほんの少しの構文糖衣です。

これが役立つことを願っています。

于 2012-11-22T18:24:35.603 に答える
0

最初にスキャン、解析してから、必要な関数を if else または switch case を使用して呼び出す必要があります。

あなたが今行っていることは、2 つの関数で同じコードを使用しており、コードを再利用していません。代わりにシングルスキャンを使用してください

于 2012-11-22T18:22:02.530 に答える