【问题标题】:How to properly use methods in Java for Magic 8 Ball program如何正确使用 Java 中的方法进行 Magic 8 Ball 程序
【发布时间】:2015-02-28 22:41:50
【问题描述】:

我没有要粘贴的代码,因为我只有一个要使用的方法的模板。希望这不是太宽泛,因为我已经看过所有内容并且没有收到我需要的答案。

很多人都看过或听说过“Magic 8 Ball”计划。用户提出一个问题,他们会收到一个随机答案作为回报。我本可以使用一种方法轻松编写代码,但现在我们已经深入研究了使用多种方法,但我错过了一块拼图。

这个节目的规则: 1)我必须创建至少三个方法:主方法、输入方法和输出方法。 2)我必须对随机答案使用 switch 语句。 3)我必须使用一个while循环(或一个do-while)来提示用户要么问另一个问题,要么退出。

我认为我唯一的问题在于将每段代码放在哪里。我需要打电话给扫描仪。这没什么大不了的。我知道如何执行 switch 语句。我知道如何随机化输出。我很可能会为继续/退出部分使用布尔值。但是我实际上应该在哪里放置扫描仪?布尔值?主要是?在输入法中?随机化的处理部分呢?我的所有变量是否都在 main 中声明,以便它们遍布各处?

我希望我的问题是有道理的。

【问题讨论】:

  • 那么,你需要Scanner在输出法中,还是只在输入法中?您应该在需要的地方声明它。这同样适用于您提到的所有变量。
  • @DavidWallace 所说的并不是最佳答案,在输入法中声明 Scanner 意味着您必须在每次输入迭代时创建它,这可能非常昂贵。在 main 中或在构造函数中将其作为类级别对象创建一次会便宜得多。如果在类级别创建,则可以直接在输入法中使用,否则如果在主方法中创建,则可以作为参数传递给输入法。
  • 我在所有东西之上都导入了 java.util.Scanner,我只需要它两次:1) 询问用户的问题是什么,2) 询问他们是否想再玩一次。
  • @tinker 这取决于他/她是打算多次调用输入法,还是只调用一次。当然,如果要多次,那么应该在外面声明。但是如果它只是一次,那么最好在方法中声明它。无法分辨,他/她的设计何时还如此模糊。
  • 没错!由于他们是初学者,最好解释这两种情况以及为什么特定方法更好。我们现在可能已经一起解释过了;)

标签: java methods while-loop switch-statement java.util.scanner


【解决方案1】:

在 main 中或在构造函数中创建一次 Scanner 作为类级别对象将比每次调用输入法时创建便宜得多。如果在类级别创建,则可以直接在输入法中使用,否则如果在主方法中创建,则可以作为参数传递给输入法。

布尔值可以在输入法中,因为你是直接比较输入,没有更多用处。

当你有一个对象,尤其是一个昂贵的对象时,最好在适用的地方只创建一次,或者尽可能少地创建它。

【讨论】:

  • 好的。这有帮助。我将继续编写我的代码并返回我的结果。谢谢,一如既往。
  • 当我可以开始回答问题而不仅仅是提问时,我会非常高兴。像这样的事情让我觉得很......菜鸟。
  • 一个问题...我发现我还不允许使用类变量。 :-(
  • 然后你可以在main中声明它并作为构造函数参数传递。
  • 我以前从未这样做过。我在下面粘贴了我完成的代码,但我很好奇它会是什么样子?
【解决方案2】:

请原谅我草率的代码,忽略案例名称。它们是临时的,因为我将重命名它们。编译后我尝试了每个场景。我问了一个问题,它回答了,它问我是否想问另一个问题。我问了另一个,它重复了提示。我回答“n”,它说“谢谢你玩。再见”,然后停止运行。这是我的代码。问题解决了。

    import java.util.Scanner;

公开课魔法球{

public static void main(String[] args) {

    int random = 0;
    boolean playAgain = true;

   while (playAgain) {
       askAnother(random);
    }//end while
}//end main


public static void askAnother(int r) {

    System.out.print("Hello! What is your question? ");
    Scanner input = new Scanner(System.in);
    String question = input.nextLine();

    String yes_or_no;
    String next_question;
    randomAnswer(r);

    boolean playAgain = true;

    while(playAgain) {
        System.out.println("Would you like to ask another question? Y to ask, N to quit.");

        yes_or_no = input.nextLine();

        if (yes_or_no.equalsIgnoreCase("Y")) {
            System.out.println("What is your next question?");
            next_question = input.nextLine();
            randomAnswer(r);

        }//end if

        else if (yes_or_no.equalsIgnoreCase("N")) {
        playAgain = false;
        System.out.println("Thanks for playing. Goodbye.");
        System.exit(0);
    }
        else {
            System.out.println("Invalid Input. Please enter Y or N.");
            continue;
        }//end else
    }//end while
}//end input method

public static int randomAnswer(int r1) {

    r1 = (int)(Math.random() * 9);

switch(r1) {
    case 0: System.out.println("Yes"); break;
    case 1: System.out.println("Yes1"); break;
    case 2: System.out.println("Yes2"); break;
    case 3: System.out.println("Neutral"); break;
    case 4: System.out.println("Neutral1"); break;
    case 5: System.out.println("Neutral2"); break;
    case 6: System.out.println("No"); break;
    case 7: System.out.println("No1"); break;
    case 8: System.out.println("No2"); break;

}//end switch
return r1;

}//结束输出方法

}//结束MagicBall类

【讨论】:

  • 我在上面回答了我自己的问题。
猜你喜欢
  • 2020-01-22
  • 1970-01-01
  • 1970-01-01
  • 2016-05-15
  • 2018-03-21
  • 2017-03-20
  • 1970-01-01
  • 1970-01-01
  • 2019-02-25
相关资源
最近更新 更多