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

Java 获取二维数组的边值,同时防止越界,java,multidimensional-array,Java,Multidimensional Array,我这里有一个4x4字符数组,我需要得到数组边缘字符的公共值…我尝试了与我的问题类似的其他问题的解决方案,但仍然得到相同的错误 这是我的密码 //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'; //

我这里有一个4x4字符数组,我需要得到数组边缘字符的公共值…我尝试了与我的问题类似的其他问题的解决方案,但仍然得到相同的错误

这是我的密码

//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);
//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';
//我特别需要在[3][3]处获取“P”。。

对于(o=0;o你能运行这个并告诉我们它是否有用吗

char[][] arr2 = ... // your array
char[][] arr3 = ... // your other array
// inspect all common indeces:
for (int i = 0; i < arr2.length && i < arr3.length; i++) {
    for (int j = 0; j < arr2[i].length && j < arr3[i].length; j++) {
        // print value, if value is the same: 
        if (arr2[i][j] == arr3[i][j]) {
            // here you know that two characters on the same index are the same.
            // you have the information about the character and the indeces:
            System.out.println("Found common value at index (i,j)->"
                    + "(" + i + "," + j + "), char '" + arr2[i][j] + "'");
        }
    }
}
char[]arr2=…//您的数组
char[][]arr3=…//您的另一个数组
//检查所有常见指标:
对于(int i=0;i”
+“(“+i+”、“+j+”),char''+arr2[i][j]+'”;
}
}
}
使用类似于注释示例中的数组,这将提供以下输出:

在索引(i,j)->(3,3),字符“p”处找到公共值

这似乎就是您要寻找的。假设两个数组具有相同的维度,此解决方案将查看两个数组中的每个索引。如果一个数组大于另一个,则只查看公共索引。您提到了有关数组边的内容。我不清楚,您是指仅查看边包括边。此答案包括边。如果您只需要查看边,请在答案下方留下注释。

在代码中

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;
        }
    }
}

在上面的作业中,您有
c+1
r+1
c-1
r-1
,如果前面的循环将r和c分配为0或3,这肯定是不允许的。

感谢帮助我解决这个问题的人。。 我可以用模运算得到数组边缘的值。我可以防止越界。。。 这个来自另一个问题的链接回答了我的问题。。
再次感谢..:-)

为什么要编写
if(Arrays.asList(arr3[m][n])包含(字母)){
而不是
if(arr3[m][n]==字母){
??@jlordo我在这个程序上面还有其他程序,我用arr3的值创建了一个字符串,它是TOP.。我想知道每个字符的位置,方法是检查它是否包含在arr3[m][n]…我猜你没有得到答案,因为你的代码读起来太复杂了。许多
if
else if
else
案例都是单字母变量名。你说
//我特别需要在[3][3]处获取“P”…
这可以通过单行
arr3[3][3]来完成
。我不理解你的代码,也不理解你的问题。至于我之前的评论,两个条件都是一样的,而我的条件很容易阅读和理解(而且效率更高),而你的条件过于复杂。你需要数组四个边的公共值?例如,如果两个数组都有
[0][3]=='r'
,应该也能找到吗?@jlordo如果我的代码看起来很复杂,很抱歉,但是如果你仔细看一下,你会发现它很简单……我正在尝试不同的方法,我只是这门语言的新手……你能教我一种更简单的方法吗……我的主要目标是在tw中获得具有相同索引的公共字符o不同的数组…在我看来OP只需要数组边缘的公共值…但它仍然需要她的确认。@sp00m:如果OP确认我可以很容易地修改我的答案;)@kathy:很乐意帮忙。请不要忘记接受最有用的答案。请看它是如何工作的:。还要投票给其他任何有用的answe是的,这就是为什么我有很多if-else语句来防止越界的原因。上面的任务甚至在if语句之前。所以我需要把这些语句放在if语句中。我只是想把它放在那里,这样我就不需要重复声明了。谢谢你的帮助。不,y在进行这些赋值之前,您需要确保r和c不在它们的边界上。例如,
right=c==3?arr2[r][c]:arr2[r][c+1]
这实际上是说如果c在边界上,不要递增,而是按原样赋值,否则
c+1
。同样,对于r=0或c=0,也需要这样做。但是如果我需要查找特定元素周围的值……如果我不递增,我将无法获得值
right  = arr2[r][c+1];
left  = arr2[r][c-1];
up  = arr2[r-1][c];
down  = arr2[r+1][c];