Java 如何打破这个while(true)循环?

Java 如何打破这个while(true)循环?,java,while-loop,break,Java,While Loop,Break,嗨,我试图打破这个循环,当两个if语句都为真时返回坐标。然而,循环永远不会结束。 我怎样才能修好它 public static String[] positionQuery(int dim, Scanner test_in) { Scanner scanner = new Scanner(System.in); System.out.println("Provide origin and destination coordinates."); Sy

嗨,我试图打破这个循环,当两个if语句都为真时返回坐标。然而,循环永远不会结束。 我怎样才能修好它

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.");
        }
    }
我想我在validCoordinates方面有问题,因为我只在validCoordinates上实现了目标,但无法发现我做错了什么

public static boolean validCoordinate(String coordinate, int dimension) {
        boolean isValidCoordinate;
        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;
        }
        for(int i = 0; i < dimension; i++){
            if((Character.toString(coordinate.charAt(0))).contains(alphabet[i])) {
                for(int j = 0; j < dimension; j++) {
                    if ((coordinate.substring(1)).contains(Integer.toString(numbers[j]))) {
                        return true;
                    }
                }
            }
        }

        return false;
    }

看看这是否有效。我刚刚创建了一个布尔标志变量来退出while循环。一旦到达第二个if,它应该使标志为false

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:");
        Boolean flag = true;
        while(flag) {
            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)) {
                    flag = false;
                    return coordinates;
                }
            }
            System.out.println("ERROR: Please enter valid coordinate pair separated by space.");
        }
    }

看看这是否有效。我刚刚创建了一个布尔标志变量来退出while循环。一旦到达第二个if,它应该使标志为false

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:");
        Boolean flag = true;
        while(flag) {
            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)) {
                    flag = false;
                    return coordinates;
                }
            }
            System.out.println("ERROR: Please enter valid coordinate pair separated by space.");
        }
    }

validcoordinate不正确,它只检查字母表数组中由维度参数指定的前几个值

试试这个

公共静态布尔值有效坐标字符串坐标,整数维{ 布尔有效坐标; 字符串[]字母={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[]数字=新的int[维度]; forint i=0;i<维度;i++{ 数字[i]=1+i; } ifarray.asListalphabet.containsCharacter.ToString坐标.charAt0{ forint j=0;j<尺寸;j++{ 如果坐标子字符串1.包含字符串编号[j]{ 返回true; } } } 返回false; } 您肯定可以改进这段代码,我将把它作为一个挑战留给您

这是相关的repl

忍者编辑: 我建议您修改您的职位查询

公共静态字符串[]positionQueryint dim{ Scanner Scanner=新ScannerSystem.in; System.out.println提供起点和终点坐标。; System.out.Printl在A1-H8之间输入两个位置:; whiletrue{ 字符串行=scanner.nextLine; 字符串[]坐标=line.split; ifcoordinates.length==2{ 字符串原点=坐标[0]; 字符串dest=坐标[1]; 如果有效坐标原点、尺寸和有效坐标终点、尺寸{ 返回坐标; } 否则{ System.out.PrintLn坐标无效; } } 否则{ System.out.printlnERROR:请输入以空格分隔的有效坐标对。; } } }
validcoordinate不正确,它只检查字母表数组中由维度参数指定的前几个值

试试这个

公共静态布尔值有效坐标字符串坐标,整数维{ 布尔有效坐标; 字符串[]字母={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[]数字=新的int[维度]; forint i=0;i<维度;i++{ 数字[i]=1+i; } ifarray.asListalphabet.containsCharacter.ToString坐标.charAt0{ forint j=0;j<尺寸;j++{ 如果坐标子字符串1.包含字符串编号[j]{ 返回true; } } } 返回false; } 您肯定可以改进这段代码,我将把它作为一个挑战留给您

这是相关的repl

忍者编辑: 我建议您修改您的职位查询

公共静态字符串[]positionQueryint dim{ Scanner Scanner=新ScannerSystem.in; System.out.println提供起点和终点坐标。; System.out.Printl在A1-H8之间输入两个位置:; whiletrue{ 字符串行=scanner.nextLine; 字符串[]坐标=line.split; ifcoordinates.length==2{ 字符串原点=坐标[0]; 字符串dest=坐标[1]; 如果有效坐标原点、尺寸和有效坐标终点、尺寸{ 返回坐标; } 否则{ System.out.PrintLn坐标无效; } } 否则{ System.out.printlnERROR:请输入以空格分隔的有效坐标对。; } } }
尝试打印origin和dest,并确保它们符合您的期望。return应该像您期望的那样打破循环。我非常确定您的return语句将打破循环。但可能ValidCoordination没有按预期工作。现在它是一个无限循环,底部的needs.System.out语句无法访问。顺便问一下,这是否回答了您的问题?尝试打印origin和dest,并确保它们符合您的期望。return应该像您期望的那样打破循环。我非常确定您的return语句将打破循环。但可能ValidCoordination没有按预期工作。现在它是一个无限循环,底部的needs.System.out语句无法访问
顺便问一下,这能回答你的问题吗?我正要回答这个问题:已经有一个返回语句了。你为什么需要一面旗帜?另外,底部的System.out语句仍然无法访问。我只是想回答这个问题:已经有一个return语句了。你为什么需要一面旗帜?此外,底部的System.out语句仍然无法访问。