Java 如何打破这个while(true)循环?
嗨,我试图打破这个循环,当两个if语句都为真时返回坐标。然而,循环永远不会结束。 我怎样才能修好它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
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语句仍然无法访问。