0

如果我有以下两个功能。如何选择将要选择的功能?

我想要么有某种形式的语句来确定扫描仪的内容,因此只有一个功能。或者它将是传递给函数的东西。

    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();
}

并添加两个新类:

   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 调用所需的函数。

您现在正在做的是在两个函数中使用相同的代码,而不是重用代码。只需使用单次扫描即可

于 2012-11-22T18:22:02.530 回答