gpt4 book ai didi

java - 计算二维数组中相邻元素的程序给出不一致的结果

转载 作者:行者123 更新时间:2023-12-01 19:34:13 25 4
gpt4 key购买 nike

我有一个必须填写的程序。它应该计算 5 x 5 二进制矩阵中的相邻数字。例如像这样的矩阵:

0 1 1 1 0 
1 0 0 0 1
1 0 0 0 0
1 0 0 1 0
0 1 0 1 0

应返回 8,您只能水平或垂直移动。

这是生成这些矩阵的代码,完成后不能进行任何修改。

import java.util.Random;

public class Test {

public static void main(String[] args) {
final Random r = new Random();


for (int kerrat = 0; kerrat < 10; kerrat++) {
int[][] alkioTaulukko = new int[5][5];

System.out.println("Matriisin");
for (int i = 0; i < alkioTaulukko.length; i++) {
System.out.print("");
for (int j = 0; j < alkioTaulukko[i].length; j++) {
alkioTaulukko[i][j] = r.nextInt(2);
System.out.print("" + alkioTaulukko[i][j] + " ");
}
System.out.println("");
}

System.out.print("suurimman yhtenäisen alueen koko on ");
System.out.println(laskeSuurinAlue(alkioTaulukko));
System.out.println("");
}

}

}

最后这是我对问题的解决方案。

static int  laskeSuurinAlue(int[][] matriisi) {

int vierekkaiset = 0;

int rivi = matriisi.length;
int palkki = matriisi[0].length;

for (int r = 0; r < rivi; r++)
{
for (int p = 0; p < palkki; p++)
{
if ((p+1 < palkki) && (matriisi[r][p] == matriisi[r][p+1]))//loops through the rows
vierekkaiset++;

if ((r+1 < rivi) && (matriisi[r][p] == matriisi[r+1][p]))//loops through the columns
vierekkaiset++;
}
}
return vierekkaiset;
}

发生的情况是,我的解决方案总是带来太大的结果,并且我无法看到每次运行之间的任何模式。但是,如果我使用像这样的较小矩阵:

int[][] array = {{1, 0, 1}, {0, 1, 1}, {0, 1, 0}};

结果正确为4。

如果我使用像这样更大的:

int[][] arr = {{1,0,1,1,0},
{0,0,1,0,0},
{0,0,1,0,1},
{1,1,1,0,1},
{0,0,1,0,0}
};

结果始终是 20。

最后这是我当前状态的代码:

    import java.util.Random;

import static java.util.Arrays.deepToString;

public class Test {
public static void main(String[] args) {
final Random r = new Random();
int[][] array = {{1, 0, 1}, {0, 1, 1}, {0, 1, 0}};
int[][] arr = {{1,0,1,1,0},
{0,0,1,0,0},
{0,0,1,0,1},
{1,1,1,0,1},
{0,0,1,0,0}
};
for (int kerrat = 0; kerrat < 10; kerrat++) {
int[][] alkioTaulukko = new int[5][5];

System.out.println("Matriisin");
for (int i = 0; i < alkioTaulukko.length; i++) {
System.out.print("");
for (int j = 0; j < alkioTaulukko[i].length; j++) {
alkioTaulukko[i][j] = r.nextInt(2);
System.out.print("" + alkioTaulukko[i][j] + " ");
}
System.out.println("");
}

System.out.print("suurimman yhtenäisen alueen koko on ");
System.out.println(laskeSuurinAlue(arr));//Change to arr,array or alkioTaulukko to run the code with different matrices
System.out.println(deepToString(arr));
System.out.println("");

}

}


static int laskeSuurinAlue(int[][] array) {


int counter = 0;

int rowLimit = array.length;
int colLimit = array[0].length;

for (int r = 0; r < rowLimit; r++)
{
for (int c = 0; c < colLimit; c++)
{
if ((c+1 < colLimit) && (array[r][c] == array[r][c+1]))
counter++;

if ((r+1 < rowLimit) && (array[r][c] == array[r+1][c]))
counter++;
}
}
return counter;
}

}

最佳答案

您多次计算同一个条目。使用此代码

static int  laskeSuurinAlue(int[][] array) {
int counter = 0;

int rowLimit = array.length;
int colLimit = array[0].length;

for (int r = 0; r < rowLimit; r++)
{
for (int c = 0; c < colLimit; c++)
{
if (array[r][c] == 0) {
continue;
}

int sum = array[r][c];
sum += (r + 1 < rowLimit) ? array[r+1][c] : 0;
sum += (c + 1 < colLimit) ? array[r][c+1] : 0;
sum += (r - 1 >= 0 ) ? array[r-1][c] : 0;
sum += (c - 1 >= 0) ? array[r][c-1] : 0;

if (sum > 1) {
counter++;
}
}
}
return counter;
}

关于java - 计算二维数组中相邻元素的程序给出不一致的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59235966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com