java - 获取二维数组的边缘值,同时防止越界

标签 java multidimensional-array

我这里有 4x4 字符数组,我需要获取位于数组边缘的字符的公共(public)值...我尝试了与我的问题类似的其他问题的解决方案,但我仍然得到相同的结果错误。,

这是我的代码..

//arr2[][]
//      arr2[3][0] = 'H';
//      arr2[3][1] = 'E';
//      arr2[3][2] = 'L';
//      arr2[3][3] = 'P';
//arr3[][]
//      arr3[1][3] = 'T';
//      arr3[2][3] = 'O';
//      arr3[3][3] = 'P';
//I specifically need the get the 'P' at [3][3]..
for(o = 0;o<count;o++){
        char letter = out.charAt(o);                        
        for(int m = 0; m < 4; m ++){    
            for(int n = 0; n < 4; n ++){
                if(Arrays.asList(arr3[m][n]).contains(letter)){ 
                    r = m;
                    c = n;
                }
            }
        }
        right  = arr2[r][c+1];
        left  = arr2[r][c-1];
        up  = arr2[r-1][c];
        down  = arr2[r+1][c];
        if(o==0){
                if(c==0){
                    if(r==0||r==3){
                        if(right!=null){
                            l = right;
                        }
                    }else{
                        if(right!=null){
                            l = right;
                        }else if(up!=null){
                            l = up;
                        }
                    }
                }else if(c==3){
                    if(r==0||r==3){
                        if(left!=null){
                            l = left;
                        }
                    }else{
                        if(left!=null){
                            l = left;
                        }else if(up!=null){
                            l = up;
                        }
                    }
                }else{
                    if(r==0||r==3){
                        if(left!=null){
                            l = left;
                        }else if(right!=null){
                            l = right;
                        }
                    }else{
                        if(left!=null){
                            l = left;
                        }else if(right!=null){
                            l = right;
                        }else if(up!=null){
                            l = up;
                        }
                    }
                }
            }
        }else if(o==(count-1)){
            if(vertical == 1){
                if(c==0){
                    if(r==0||r==3){
                        if(right!=null){
                            l = right;
                        }
                    }else{
                        if(right!=null){
                            l = right;
                        }else if(down!=null){
                            l = down;
                        }
                    }
                }else if(c==3){
                    if(r==0||r==3){
                        if(left!=null){
                            l = left;
                        }
                    }else{
                        if(left!=null){
                            l = left;
                        }else if(down!=null){
                            l = down;
                        }
                    }
                }else{
                    if(r==0||r==3){
                        if(left!=null){
                            l = left;
                        }else if(right!=null){
                            l = right;
                        }
                    }else{
                        if(left!=null){
                            l = left;
                        }else if(right!=null){
                            l = right;
                        }else if(down!=null){
                            l = down;
                        }
                    }
                }
            }
        }else{
            if(vertical == 1){
                if(c==0){
                    if(right!=null){
                        l = right;
                    }
                }else if(c==3){                                 
                    if(left!=null){
                        l = left;
                    }
                }else{
                    if(right!=null){
                        l = right;
                    }else if(left!=null){
                        l = left;
                    }
                }
            }
        }
        k = Character.toString(letter);
        letr = Character.toString(l);

最佳答案

在您的代码中,

for(int m = 0; m < 4; m ++){    
    for(int n = 0; n < 4; n ++){
        if(Arrays.asList(arr3[m][n]).contains(letter)){ 
            r = m;
            c = n;
        }
    }
}

在这里,您分配的 r 和 c 在某些情况下可能是 03,然后是下面的代码,

right  = arr2[r][c+1];
left  = arr2[r][c-1];
up  = arr2[r-1][c];
down  = arr2[r+1][c];

在上述作业中,您有 c + 1r + 1c - 1r - 1 如果前一个循环将 r 和 c 指定为 0 或 3,则肯定会超出范围。

关于java - 获取二维数组的边缘值,同时防止越界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15004992/

相关文章:

java - 在 Java 中使用“=?”比较两个值

java - JAVA 对象之间的 OOP 和事务

php - jQuery $.post PHP 处理多维对象或数组的最佳方法是什么

java - 网格停在 10 x 50 而不是 50 x 50

Swift 2 将 "contains"函数与多维数组一起使用

javascript - Google App 脚本数组

java - 如何读取注释文件?

java - 缺少激活 DataHandler 类

java - android获取视频缩略图路径,而不是位图

c - 在函数之间传递多维数组