有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JAVAutil。java中的扫描仪问题

我的扫描仪怎么了?我也试着不把它放在一个循环中,但它不起作用。我希望用户输入一个选项,然后将服务器与选项一起打印出来

private static String getLogLocation(){
    System.out.print("Please pick one (Dev, UAT, Lab, Sandbox): ");
    Scanner scan = new Scanner(System.in);
    String server = null;
    Boolean breaking = true;
    String choice = scan.nextLine();

    while(scan.hasNext() && breaking){
        if(choice.equals("Dev")){
            server = "CNNDCPV02465.dcld.nndc.kp.org";
            breaking = false;
        }
        if(choice.equals("UAT")){
            server = "CNNDCPV02464.dcld.nndc.kp.org";
            breaking = false;
        }
        if(choice.equals("Lab")){
            server = "CNNDCBIPP242.nndc.kp.org";
            breaking = false;
        }
        if(choice.equals("Sandbox")){
            server = "CNNDCBIPP241.nndc.kp.org";
            breaking = false;
        }
    }
    System.out.println("Server" + server);
    return server;
}

共 (1) 个答案

  1. # 1 楼答案

    代码中几乎没有问题

    • 在以前的版本中,当有下一个元素时,您可以循环,但对于System.in,我们无法知道是否有下一个元素,因为此流始终处于打开状态,因此有机会获得新数据,并且方法hasNext将等待新数据,或者等待关闭此流的信号
    • 在较新版本的代码中,每次调用此方法时,您都会创建Scanner包装System.in,然后关闭它,这意味着您也将关闭System.in,一旦关闭,您将无法再次读取它

    所以,不要每次都重新创建扫描仪,而是创建一次并将其传递给您的方法,如

    private static String getLogLocation(Scanner scanner){
        ...
        String data = scanner.readLine();
        ...
        //scanner.close(); //DON'T do it in this method!!!
    }
    

    现在,关于循环,您可以创建如下内容:

    Set<String> correctOptions = new HashSet<>(Arrays.asList("opt1", "opt2"));// and so on
    String option = null;
    do {
        System.out.print("select option: ");
        option = scanner.nextLine();
    } while (!correctOptions.contains(option));
    //here you are sure that selected option is correct
    //handle it as you want.