我在下面的代码中得到的错误是:
“线程“主”中的异常java.lang.ArrayIndexOutOfBoundsException: -1在Main.main(Main.java:50)“
修复可能很明显,但我只是不明白,如果该代码可以编译并且提供了很好的输出,你们是否对如何自动获取而不是手动进行计算的矩形区域有任何想法,只是一个提示或想法,而不是整个代码。
public class Main extends JPanel{
public static void main(String[] args) {
String line = " F 6 R 1 F 4 RFF 2 LFF 1 LFFFR 1 F 2 R 1 F 5 ";
String pattern = "[RLF ]+[1-9]{1}";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
List<String> operations = new ArrayList<String>();
while(m.find()){
System.out.println("found this "+ m.group());
operations.add(m.group());
}
String[][] arrays = new String[1000][1000];
int x = 500;
int y = 500;
arrays[x][y] = "1";
int k = 1;
for(String operation : operations){
int op = Integer.parseInt(operation.replaceAll("\\D", ""));
String directions = operation.replaceAll("[0-9]{1}", "");
char[] directionsArray = directions.toCharArray();
for(int i = 0; i<op; i++){
for( int j = 0; i<directionsArray.length; j++){
if(directionsArray[j] != ' '){
if (directionsArray[j] == 'R'){
k =+ 1;
if(k > 4) k = 1;
}else if (directionsArray[j] == 'L'){
k =- 1;
if(k < 1) k = 4;
}else if (directionsArray[j] == 'F'){
if (k == 1) {
x =- 1;
arrays[x][y] = "1";
}else if (k == 2){
y =+ 1;
arrays[x][y] = "1";
}else if(k == 3){
x =+ 1;
arrays[x][y] = "1";
}else if(k == 4){
y =-1;
arrays[x][y] = "1";
}
}
}
}
}
}
for(int i =0; i<arrays.length;i++){
for(int j = 0; i<arrays.length;i++){
System.out.println(arrays[i][j]);
}
}
}
}
感谢您的时间。
答案 0 :(得分:4)
您要将y
分配为-1(Java将y =-1;
解析为y = -1;
),然后将其用作下一行的索引。您可能打算用y
减少y -= 1;
。 (在x
和y
变量中都可以做到这一点。)