在Java中按对角线查找一行中的5个值
我有一个10x10阵列:在Java中按对角线查找一行中的5个值,java,Java,我有一个10x10阵列: private static int[][] intersections = new int[10][10]; 我使用此代码来查找水平方向上一行中是否有5个值: public static int horizontalCheck() { String horizontal = ""; for (int i = 0; i < intersections.length; i++) { for (int j = 0; j < in
private static int[][] intersections = new int[10][10];
我使用此代码来查找水平方向上一行中是否有5个值:
public static int horizontalCheck() {
String horizontal = "";
for (int i = 0; i < intersections.length; i++) {
for (int j = 0; j < intersections[i].length; j++) {
horizontal += Integer.toString(intersections[i][j]);
}
if (horizontal.indexOf("11111") != -1) {
// White wins.
return 1;
} else if (horizontal.indexOf("22222") != -1) {
// Black wins.
return 2;
}
horizontal = "";
}
return 0;
}
publicstaticinthorizontalcheck(){
字符串水平=”;
对于(int i=0;i
和一个类似的代码来垂直执行。但我的问题是,我怎么能找到一行对角线上是否有5个值?电路板的尺寸为10x10,对角线可以是电路板上任何位置的双向。如果您有任何问题或需要有关代码的更多信息,请务必询问。我建议您为此编写一个帮助函数。函数应采用以下参数:
-需要开始检查的起始行r0
-需要从中开始检查的起始列c0
-从dr
{-1,0,1}
-从dc
{-1,0,1}
-要查找的项目数len
-要查找的数字num
private static boolean checkRow(int r0, int c0, int dr, int dc, int len, int num) {
for (int k = 0 ; k != len ; k++) {
int r = r0 + k*dr;
int c = c0 + k*dc;
if (r < 0 || c < 0 || r >= intersections.length || c > intersections[r].length || intersections[r][c] != num) {
return false;
}
}
return true;
}
这是什么意思?水平排列5个值。我认为使用
horizontal.contains
会更惯用。如果你知道php@Trojan.ZBOT,基本上我的意思是,这是一款Gomoku游戏,你可以在水平、垂直或对角排列的5个按钮上获胜。播放器按钮在数组中相应地表示为1和2。小点。不管交叉点的奇怪算法是什么,如果字符串连接运行多次,就不应该使用它。这是致命的无效。请改用StringBuilder
。谢谢您的帮助。
// See if we've got five eights in any direction:
for (int r = 0 ; r != intersections.length ; r++) {
for (int c = 0 ; c != intersections[r].length ; c++) {
if (checkRow(r, c, 0, 1, 5, 8)) {
System.out.println("Horizontal, starting at "+r+" " +c);
}
if (checkRow(r, c, 1, 0, 5, 8)) {
System.out.println("Vertical, starting at "+r+" " +c);
}
if (checkRow(r, c, 1, 1, 5, 8)) {
System.out.println("Diagonal descending right, starting at "+r+" " +c);
}
if (checkRow(r, c, 1, -1, 5, 8)) {
System.out.println("Diagonal descending left, starting at "+r+" " +c);
}
}
}