ちょっと借りますね
public class DiceTray {
private int row;
private int col;
private char[][] gameboard;
private char[][] work;
public DiceTray(char[][] array) {
row = array.length;
col = array[0].length;
gameboard = array;
work = new char[row][col];
}
public static void main(String[] args) {
char[][] map = {
{'A', 'B', 'C', 'D'},
{'E', 'F', 'G', 'H'},
{'I', 'J', 'K', 'L'},
{'M', 'N', 'O', 'P'}
};
// 対象文字列です。この文字をchar型配列mapから検索します
String target = "AFKP";
DiceTray app = new DiceTray(map);
System.out.println(app.stringFound(target));
}
public boolean stringFound(String search) {
boolean blt = true;
int nowRow = 0;
int nowCol= 0;
// charValueArgsの配列数です
int charValueArgsLength = search.length();
// searchの文字数と同数の配列数を初期化します
char[] charValueArgs = new char[charValueArgsLength];
// 紛らわしいので,配列数変数と対象文字列数変数を別々に分けます
int searchLength = charValueArgsLength - 1;
// String型のsearchをchar型の配列に変換
search.getChars(0, searchLength, charValueArgs, 0);
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (gameboard[i][j] == charValueArgs[0]) {
nowRow = i;
nowCol = j;
break;
} else {
blt = false;
}
}
}
work[nowRow][nowCol] = charValueArgs[0];
// charValueArgs[1]から検索開始
for (int i = 1; i <= searchLength; i++) {
for (int j = (nowRow - 1); j <= (nowRow + 1); j++) {
for (int k = (nowCol - 1); k <= (nowCol + 1); k++) {
if ((j < 0) || (j >= row) || (0 > k) || (k >= col)) {
continue;
} else if (charValueArgs[i] == gameboard[j][k]) {
blt = true;
nowRow = j;
nowCol = k;
work[nowRow][nowCol] = charValueArgs[i];
break;
} else {
blt = false;
}
}
// 文字合致判定がtrueで,かつ対象文字列を検索し終えていたらreturn
if ((blt == true) && (i == searchLength)) {
return blt;
}
}
}
for (int i = 0; i < row; i++) { // 配列の中身をクリア
for (int j = 0; j < col; j++) {
work[i][j] = ' ';
}
}
return blt;
}
}
read.php ver2.4 2005/04/13