我想重新启动for循环。我有一个作业问题,其中我必须以A到Z的二维数组告诉用户给定单词的坐标(一次输入一个字母)。
例如:如果用户输入单词“ GREAT”,则程序必须在锯齿状数组中打印每个字母位置的坐标。 (G-1,1,R-3,2,E-2,1,A-0,0,T-3,4)
使用嵌套的for循环,我可以打印正向字符(我的意思是,单词“ GOT”具有从A到Z的字符),如果我尝试使用“ GET”(在这里,在“ G”之后, 'E'向后退),程序在'G'之后停止。因此,我想如果可以在打印每个字母的坐标后重新启动循环,那么我可以打印所有坐标。
`//2D array
char a[][] = {{'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'}};
//if the user given word is GET,
//then the output should be
//G-1,1
//E-0,5
//T-3,5`
答案 0 :(得分:1)
您无需为此重新启动循环,因为单词中每个字符都有单独的循环是非常低效率的。
解决此问题的方法是使用Java映射,其中键是字符,值是初始数组中的条目。
只需创建一个类调用WordCoordinatesLocator
(或听起来很不错的类),即可使用您的二维数组并在构造函数中构建Map。将地图另存为实例变量,然后公开一个名为getCoordinates(String word)的公共方法,该方法将访问每个字符的地图并建立响应。
如果您收到无效字符(原始字母数组中未包含的字符),则可能要引发异常。 然后创建一个单元测试以证明它按预期工作。
答案 1 :(得分:0)
有几种方法可以做到这一点。
一种简单的方法是您可以搜索单词中的每个字符并打印其位置。
如果检查每个字符,为什么需要重新启动循环。
您可以如上所述使用Java映射,甚至可以使用哈希表,但这不是一个大任务。
可以帮助您的简单代码。
String word = "GET";
char a[][] = {{'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 l=0;
while(l<word.length()) {
for (int i = 0 ; i < 6; i++)
for(int j = 0 ; j < 6 ; j++)
if (word.charAt(l) == a[i][j])
System.out.println(i + " " + j);
l++;
}
您甚至可以使用switch或多个,否则大声笑...
答案 2 :(得分:0)
由于最后一行是特殊的,它仅包含一个字符Z
,因此我们从二维数组中删除,则该数组将为5 * 5
数组。
public static void print(char[][] array, String input) {
if (null == input || input.isEmpty()) {
return;
}
for (int i = 0; i < input.length(); i++) {
char var0 = input.charAt(i);
// Z is special we check first
if (var0 == 'Z') {
System.out.println("Z-6,1");
continue;
}
// Traversing the array to find coordinate
for (int row = 0; row < 5; row++) {
for (int clo = 0; clo < 5; clo++) {
char var1 = array[row][clo];
if (var0 == var1) {
System.out.println(var0 + "-" + row + "," + clo);
break;
}
}
}
}
}