减去X时索引超出范围

时间:2018-11-15 14:10:07

标签: java arrays

我正在尝试查找旅行的矩形区域,可以在此处找到更多背景信息enter image description here enter image description here

我在下面的代码中得到的错误是:

  

“线程“主”中的异常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]);
        }
    }
}


}

感谢您的时间。

1 个答案:

答案 0 :(得分:4)

您要将y分配为-1(Java将y =-1;解析为y = -1;),然后将其用作下一行的索引。您可能打算用y减少y -= 1;。 (在xy变量中都可以做到这一点。)