Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么while循环永远不会结束?_Java_While Loop_Do While - Fatal编程技术网

Java 为什么while循环永远不会结束?

Java 为什么while循环永远不会结束?,java,while-loop,do-while,Java,While Loop,Do While,我试图询问扫描仪输入,直到我得到一个有效的答案,但我的while循环并没有结束。首先,我请求用户输入,然后如果输入有效,我将打印出坐标,如果输入无效,我将抛出一个错误并再次请求输入。 这是我的代码: public static String[] positionQuery(int dim, Scanner test_in) { String[] coordinates; Scanner stdin = new Scanner(System.in);

我试图询问扫描仪输入,直到我得到一个有效的答案,但我的while循环并没有结束。首先,我请求用户输入,然后如果输入有效,我将打印出坐标,如果输入无效,我将抛出一个错误并再次请求输入。 这是我的代码:

public static String[] positionQuery(int dim, Scanner test_in) {
        String[] coordinates;
        Scanner stdin = new Scanner(System.in);
        System.out.println("Provide origin and destination coordinates.");
        System.out.println("Enter two positions between A1-H8:");
        String s1 = stdin.nextLine();
        coordinates = s1.split(" ");
        String origin = coordinates[0];
        String dest = coordinates[1];

        while (!validCoordinate(origin,dim) || !validCoordinate(dest,dim) || coordinates.length != 2) {
            System.out.println("ERROR: Please enter valid coordinate pair separated by space.");
            Scanner stdin2 = new Scanner(System.in);
            System.out.println("Provide origin and destination coordinates.");
            System.out.println("Enter two positions between A1-H8:");
            String s2 = stdin.nextLine();
            coordinates = s1.split(" ");
            String origin2 = coordinates[0];
            String dest2 = coordinates[1];
        }
        return coordinates;

    }
我怎样才能修好它?我还尝试了do while循环,但循环仍然没有终止:

public static boolean validCoordinate(String coordinate, int dimension) {
    String [] alphabet = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
    int [] numbers = new int [dimension];
    int one = 1;
    for(int i = 0; i < dimension; i++){
        numbers[i] = one + i;
    }
    String[] validC = new String [dimension]; //if the first char  is a letter + a number that is determined my the dimension (string concat
    for(int i = 0; i < dimension; i++) {
        for(int j = 0; j < dimension; j++){
            validC [i] = alphabet[j] + Integer.toString(numbers[j]);
        }
    }

    for(int i = 0; i < dimension; i ++) {
        if(validC[i].equals(coordinate)) {
            return true;
        }
        else {
            return false;
        }
    }
        return true;
}

origin
dim
dest
的循环中,您从不修改
origin
dim
dest
<代码>!有效坐标(原点,dim)| |!validCoordinate(dest,dim)使用Scanner作为参数调用方法
positionQuery
,并在方法内部创建更多的Scanner实例。这是错误的,您一次只能有一个扫描仪连接到System.in,因此请使用作为函数参数传递的扫描仪。扫描仪输入应该在循环中,对吗?这是否回答了您的问题?
public static String[] positionQuery(int dim, Scanner test_in) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Provide origin and destination coordinates.");
        System.out.println("Enter two positions between A1-H8:");
        while(true) {
            String line = scanner.nextLine();
            String[] coordinates = line.split(" ");
            if(coordinates.length == 2) {
                String origin = coordinates[0];
                String dest = coordinates[1];
                if(validCoordinate(origin, dim) && validCoordinate(dest,dim)) {
                    return coordinates;
                }
            }
            System.out.println("ERROR: Please enter valid coordinate pair separated by space.");
        }
    }