scanner用户输入

5f0d552i  于 2021-07-08  发布在  Java
关注(0)|答案(2)|浏览(306)

这个问题在这里已经有答案了

什么是nullpointerexception,如何修复它(12个答案)
java.util.nosuchelementexception-扫描仪读取用户输入(4个答案)
上个月关门了。
我试图得到一个菜单选项风格的待办事项列表,允许用户选择他们想做什么。当我运行代码时,它允许我输入一次,然后当它返回并且我希望它再次等待userinput以便它们再次导航时,它抛出一个nullpointerexception。我试过各种方法来解决这个问题。

public class ToDoListApplication {

    Scanner scanner;
    String input;

    public ToDoListApplication() {
        System.out.println("Starting Application\nType 'Help' for Options\nPlease Select an Option..");
        scanner = null;
        menu();

    }

    public void menu() {
        input = null;
        if (input == null) {
            input = userInput();
        }
        methodSelector(input);

    }

    public String userInput() {
        scanner = new Scanner(System.in);
        if (scanner.hasNextLine()) {
            input = scanner.nextLine();
        } 
        scanner.close();    
        return input;
    }

    public void methodSelector(String userInput) {

        if (userInput.equalsIgnoreCase("help")) {
            helpMethod();
        } else {
            System.out.println("unknown string");
        }

    }

    public void helpMethod() {
        System.out.println("Command 'Add': Add To-do item to list.\nType 'Remove': Remove Item from List.\nType 'Count': See how many items in list.\nType 'Find': Locate specific item by name.\nType 'Print': See all items in list.");
        menu();
    }
}

qxsslcnc

qxsslcnc1#

是否是因为您关闭了扫描仪,同时关闭了system.in?我不能评论,所以我只能张贴一个答案。抱歉,如果它不起作用。

bgtovc5b

bgtovc5b2#

菜单应该在while循环中完成。
您可以使用类似的结构:

public static int menu()
{
  int choiceMenu = 0;
  boolean validChoice = false;

while (validChoice == false)
  {
    System.out.println ("Select file to import :");
    System.out.println ("1. Part 1.");
    System.out.println ("2. Part 2.");
    System.out.println ("3. Part 3.");
    Scanner waitingForChoice = new Scanner(System.in);

    try
    {      
      choiceMenu = waitingForChoice.nextInt();
      if (choiceMenu < 4 && choiceMenu > 0)
      {
        waitingForChoice.close();
        validChoice = true;
        return choiceMenu;
      }
        else
        {
          validChoice = false;
          System.out.println("Entry invalid. Enter 1, 2, or 3.");
        }  
    } 
      catch (InputMismatchException e)
      {
        validChoice = false;
        System.out.println("Must be a number. Enter 1, 2, ou 3.");
      }
      catch (Exception e)
      {
        e.printStackTrace();
      }
  } 
  return choiceMenu;
}

我验证了选择是正确的类型,并且在正确的数字范围内。只要输入无效,while循环就会运行。当用户选择了一个有效的选项时,while循环退出并返回菜单选项。

相关问题