1

ここに 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);
4

3 に答える 3

0

あなたのコードでは、

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

0ここでは、おそらくまたは3場合によっては以下のコードである可能性があるrとcを割り当てています。

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

上記の割り当てでは、、、がありますc + 1。これはr + 1、前のループでrとcに0または3が割り当てられている場合、確実に範囲外になります。c - 1r - 1

于 2013-02-21T15:38:26.767 に答える
0

これを理解するのを手伝ってくれた人に感謝します..モジュロを使用して配列の端にある値を取得できました..範囲外になるのを防ぐことができました... https://stackoverflow.com/a /12743834/2078012 別の質問からのこのリンクは私の問題に答えました..ありがとうございました..:-)

于 2013-02-23T09:28:02.957 に答える
0

これを実行して、役立つかどうかお知らせください。

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] + "'");
        }
    }
}

コメント付きの例のような配列を使用すると、次の出力が得られます。

Found common value at index (i,j)->(3,3), char 'P'

これはあなたが探しているもののようです。両方の配列の次元が同じであると仮定すると、このソリューションは両方の配列のすべてのインデックスを調べます。一方の配列が他方よりも大きい場合、共通のインデックスのみが参照されます。配列の端について何か言及しました。エッジのみを意味するのか、エッジを含めて意味するのかは、私にはわかりません。この回答にはエッジが含まれています。エッジだけを確認する必要がある場合は、回答の下にコメントを残してください。

于 2013-02-21T15:24:49.617 に答える