当前位置: 首页 > 知识库问答 >
问题:

Java get integer输入法需要输入两次

尚俊楠
2023-03-14

这是菜单类

import java.util.Scanner;

公共类菜单{private String[]Menu_options;

public Menu(String[] menu_options) {
    this.menu_options = menu_options;
}

public int getUserInput() {
    int i = 1;
    for (String s : this.menu_options) {
        System.out.println(i + ". " + s);
        i++;
    }

    int selection = getint_input(menu_options.length);
    return (selection);
}

private int getint_input(int max) {
    boolean run = true;
    int selection = 0;

    while (run) {
        System.out.print("Select an option: ");
        Scanner in = new Scanner(System.in);


        if (in.hasNextInt()) {
            int value = in.nextInt();
            if(value>=1 || value<=max){
                selection = value; //fixed this now working
                run = false;    
            }

        } else {
            System.out
                    .print("Invalid input. Please enter a integer between 1 and "
                            + max + ": ");

        }
    }
    return selection;
}

}

这是我使用的菜单驱动程序

公共类 Menutester {

public static void main(String[] args) {
    String[] menuitems = new String[2];
    menuitems[0] = "option one";
    menuitems[1] = "option two";
    Menu tm = new Menu(menuitems);
    int choice  = tm.getUserInput();
    System.out.println("Got input");
}

}

我第一次输入一些东西时,它根本不会重新生成,当我尝试在eclipse中调试它时,它会给我错误FileNotFoundException(Throwable)。(字符串)行:第一次输入195。

这就是它的回报

  1. 选项一
  2. 选项二选择一个选项:1(我输入了this并按Enter)1(这里相同,只是它重新评估了输入)得到了输入

共有2个答案

姬旭
2023-03-14

替换:< br >

   if (in.hasNextInt() && in.nextInt() >= 1 || in.nextInt() <= max) {
        selection = in.nextInt();
        run = false;
        System.out.println(run);

    }

如:

int input = in.nextInt();
if (input  >= 1 || input  <= max) {
    selection = in.nextInt();
    run = false;
    System.out.println(run);
}

再试一次。

水铭晨
2023-03-14

nextInt读取输入并将其从缓冲区中移除。如果不存储值,就不能这样调用它。

调用它一次,存储值,然后执行所有需要的检查。

改变这一点:

if (in.hasNextInt() && in.nextInt() >= 1 || in.nextInt() <= max) {
            selection = in.nextInt();
//...

为此:

if(in.hasNextInt()) {
   int selection = in.nextInt();
   if(selection >= 1 || selection <= max) {
       run = false;
   }
}
 类似资料:
  • 我遇到了一个循环问题,我必须输入两次温度才能启动循环。我想我知道问题在哪里,只是不知道如何解决。我已经编写了总共三周的代码,所以我在这方面完全是个初学者。 这是我有问题的代码部分: 我想你明白我的意思了。我唯一能让循环工作的方法就是重复int.Parse(Console.ReadLine()),但也许还有另一种修复方法可以修复必须输入两次温度的问题? 真希望有人能帮我解决这个问题。

  • 我尝试了在tenorflow站点中的初始教程:https://www.tensorflow.org/versions/r0.12/how_tos/image_retraining/bazel构建成功完成,但当我尝试用此命令预测图像类时: 我有这个错误:张量流/示例/label_image/main.cc:305]运行模型失败:未找到:FeedInput:无法找到提要输出输入 我怎样才能解决这个问题

  • 编写一个程序,向用户询问一顿饭的费用,计算这顿饭的小费(18%),计算这顿饭的税收(8.25%),然后显示这顿饭的费用、这顿饭的小费金额、这顿饭的税收这顿饭,以及这顿饭的总数,这是成本、小费和税额的总和 这是我的密码: Python Shell上的输出: 输入餐费:19.95 成本:19.95 输入餐费:19.95 提示:3.59 输入餐费:19.95 税费:1.65 输入餐费:19.95 这可能

  • 问题内容: 我有一个UNIX本机可执行文件,它要求像这样输入参数 prog.exe <foo.txt。 foo.txt有两行:bar baz 我正在使用java.lang.ProcessBuilder来执行此命令。不幸的是,prog.exe仅能使用文件重定向功能。有什么办法可以模仿Java中的这种行为? 当然, 不起作用。 谢谢! 问题答案: 未经测试,但类似的东西应该起作用。

  • 从Kafka Streams 2.5.0开始,拓扑似乎必须包含一个输入主题。在Kafka2.4.1(以及更早的版本)中,情况并非如此。 我有一个应用程序,其中的拓扑只是创建一些全局状态存储,从其他应用程序写入的主题中读取数据。 使用Kafka 2.5.0,我得到以下错误: 如果添加一个虚拟输入主题(例如,通过),应用程序启动良好。 这种行为是意料之中的,还是Kafka Streams 2.5.0中

  • 输入法是一种将输入设备输入的数据翻译成字符的方法,这个方法可以表示编码方案和输入平台两种含义,本文将输入法作为输入平台来讲解 LCUI 对它的支持方案。 LCUI 的输入法引擎负责的工作很简单:记录支持的输入法列表,在有按键输入时调用当前激活的输入法驱动进行处理,然后转换成 TEXTINPUT 事件,让 TextEdit 等具有文本输入支持的组件接收输入法输入的文本。 添加输入法 LCUI 将输入