【问题标题】:How do I pull integer from method?如何从方法中提取整数?
【发布时间】:2014-08-24 19:55:11
【问题描述】:

我必须使用方法public static int getMenuOption,我无法让它返回一个整数。

它必须按照我的方式循环,如果选择正确或连续3次错误则重复循环,您将退出。

我无法理解如何将 intValue 拉出循环?

public static int getMenuOption() {
    Scanner theScanner = new Scanner(System.in);
    for (int i = 0; i < 3; i++) {
        int intValue = 1;
        while (intValue > 0 && intValue < 6) {
            System.out.println("Menu");
            System.out.println("1. Add");
            System.out.println("2. Subtract");
            System.out.println("3. Multiply");
            System.out.println("4. Divide");
            System.out.println("5. Generate a random number");
            System.out.println("6. Quit\n");
            System.out.print("What would you like to do? ");
            intValue = theScanner.nextInt();
            if (intValue > 6 || intValue < 1) {
                System.out.println("I'm sorry, " + intValue +
                    " wasn't one of the options");
            }

        }
    }

    return intValue;
}

【问题讨论】:

  • 您是否尝试过使用return 语句?
  • 它返回了什么,你期望它返回什么?
  • 它需要返回那个数字,例如 1 用于添加,这样我就可以调用另一个方法来添加

标签: java loops methods


【解决方案1】:

看起来你的 while 条件是错误的。

应该是:

while(intValue &lt;=0 || intValue &gt;6)

因为您希望保持在循环中,直到获得有效输入(1 到 6 之间)。

此外,尚不清楚外部 for 循环的用途。您可能应该删除它,因为在 while 循环找到有效输入后,该方法应该返回。

public static int getMenuOption() {
    Scanner theScanner = new Scanner(System.in);
    int intValue = 1;
    while (intValue <= 0 || intValue > 6) {
        System.out.println("Menu");
        System.out.println("1. Add");
        System.out.println("2. Subtract");
        System.out.println("3. Multiply");
        System.out.println("4. Divide");
        System.out.println("5. Generate a random number");
        System.out.println("6. Quit\n");
        System.out.print("What would you like to do? ");
        intValue = theScanner.nextInt();
        if (intValue > 6 || intValue < 1) {
            System.out.println("I'm sorry, " + intValue +
                " wasn't one of the options");
        }

    }

    return intValue;
}

【讨论】:

  • 我必须成功,所以如果您选择正确的选项,它会一直循环直到您退出。如果您连续做出 3 个错误选择,它也需要强制退出。你的条件使它在外面循环ip,这不是我想要的。如果它在 0-6 之外,我希望应用 for 循环
  • @KipBodey 您不想将选择的正确选项返回给此方法的调用者吗?如果在输入正确选项时继续循环,则永远不会将该正确选项传递给调用者。
  • ahhhhhhh 所以我的正确执行循环需要在程序结束时超出此范围。好的。解决了这个问题,但是现在我如何在运行此方法时将 intValue 作为选择?
【解决方案2】:

你的条件不对。

制作它: while(intValue &lt;= 0 || intValue &gt; 6)

也可以像这样在 for 循环之外声明 intValue:

Scanner theScanner = new Scanner(System.in);
int intValue;
for (int i = 0; i < 3; i++) {
    intValue = 1;

这样做之后你应该没事了。

编辑:

public static int getMenuOption() {
    Scanner theScanner = new Scanner(System.in);
    int intValue = 1;
    for (int i = 0; i < 3; i++) { //Useless for loop.
        intValue = 1; //reset var each time
        while (intValue <= 0 || intValue > 6) {
            System.out.println("Menu");
            System.out.println("1. Add");
            System.out.println("2. Subtract");
            System.out.println("3. Multiply");
            System.out.println("4. Divide");
            System.out.println("5. Generate a random number");
            System.out.println("6. Quit\n");
            System.out.print("What would you like to do? ");
            intValue = theScanner.nextInt();
            if (intValue > 6 || intValue < 1) {
                System.out.println("I'm sorry, " + intValue +
                    " wasn't one of the options");
            } else {
                return intValue;
            }

        }
    }

    return intValue;
}

我相信这是您想要的代码:

编辑:

public static int getMenuOption() {
    Scanner theScanner = new Scanner(System.in);
    int count = 0;
    int intValue = 1;
        while (intValue <= 0 || intValue > 6) {
            System.out.println("Menu");
            System.out.println("1. Add");
            System.out.println("2. Subtract");
            System.out.println("3. Multiply");
            System.out.println("4. Divide");
            System.out.println("5. Generate a random number");
            System.out.println("6. Quit\n");
            System.out.print("What would you like to do? ");
            intValue = theScanner.nextInt();
            if (intValue > 6 || intValue < 1) {
                System.out.println("I'm sorry, " + intValue +
                    " wasn't one of the options");
                count++;
            } else if (count == 3 || intValue <= 6 && intValue >= 1) {
                return intValue;
            }

    return intValue;
}

【讨论】:

  • 我不能在循环外声明 intValue = 1,因为它是在循环内定义的,它说不能解析为变量。
  • @KipBodey 查看编辑。这就是我要你声明变量的方式。
  • 好的,解决了。我仍然不确定选择正确的选项时如何选择它来停止重复并拉动整数 span>
  • @KipBodey 查看编辑。虽然我仍然不确定为什么需要外部 for 循环,但删除它将确保除非用户选择有效输入,否则他将永远不会退出 while 循环。从而给你想要的效果。
  • @KipBodey 所以在 for 循环之后添加一个 System.exit(0) 。我解决了你的问题吗?
猜你喜欢
  • 2012-08-22
  • 2019-04-10
  • 2020-07-06
  • 2017-07-07
  • 2021-08-11
  • 1970-01-01
  • 2019-02-01
相关资源
最近更新 更多