提问人:Silly Piggy 提问时间:6/9/2023 最后编辑:shmoselSilly Piggy 更新时间:6/11/2023 访问量:90
Java 分配解决方案请求:连续相等的数字
Java Assignment Solution Request: Consecutive Equal Numbers
问:
这个 java 作业让我大吃一惊,我希望有人能帮我解决这个问题,并解释他们是如何找到答案的?我已经尝试了几个小时来理解它:/这太臭了!
作业:连续相等的数字
问题描述:
编写以下函数,用于测试二维列表是否具有四个相同值的连续数字,可以是水平、垂直还是对角线。
public static boolean isConsecutiveFour(int[][] values)
编写一个测试程序,提示用户输入二维列表的行数和列数,然后输入列表中的值。程序将显示 发现连续出现四次 n。 如果列表包含四个连续数字,其值为 n。否则,它将显示 没有发现连续出现四次。
我几乎试图理解数组,但有太多的术语和数字,它摧毁了我的思想:/
答:
0赞
Reilas
6/9/2023
#1
这在基本的 5 x 5 输入上进行了测试,并且有效。
它只是 for 循环和条件检查。
如果您有任何问题,请告诉我 - 我在每个测试上方添加了评论。
public class Example {
public static void main(String[] args) {
ui();
}
static int rows, columns;
static void ui() {
Scanner scanner = new Scanner(System.in);
System.out.print("enter rows and columns: ");
rows = scanner.nextInt();
columns = scanner.nextInt();
int[][] values = new int[rows][columns];
for (int row = 0; row < rows; row++) {
System.out.printf("enter row %d: ", row + 1);
for (int column = 0; column < columns; column++)
values[row][column] = scanner.nextInt();
}
System.out.println("isConsecutiveFour(values) = " + isConsecutiveFour(values));
}
public static boolean isConsecutiveFour(int[][] values) {
/* check horizontal */
int previous, count;
for (int[] row : values) {
previous = row[0];
count = 0;
for (int index = 1; index < row.length; index++) {
if (previous == row[index]) count++;
if (count == 3) return true;
previous = row[index];
}
}
/* check vertical */
for (int column = 0; column < columns; column++) {
previous = values[0][column];
count = 0;
for (int row = 1; row < rows; row++) {
if (previous == values[row][column]) count++;
if (count == 3) return true;
previous = values[row][column];
}
}
/* check horizontal, left to right */
for (int column = 0; column < columns; column++) {
previous = values[0][column];
count = 0;
for (int row = 1; row < rows; row++) {
if (column + 1 >= columns) break;
if (previous == values[row][++column]) count++;
if (count == 3) return true;
previous = values[row][column];
}
}
/* check horizontal, right to left */
for (int column = 0; column < columns; column++) {
previous = values[rows - 1][column];
count = 0;
if (rows - 2 < 0) return false;
for (int row = rows - 2; row >= 0; row--) {
if (column + 1 >= columns) break;
if (previous == values[row][++column]) count++;
if (count == 3) return true;
previous = values[row][column];
}
}
return false;
}
}
示例输入和输出。
这些应该通过。
enter rows and columns: 5 5
enter row 1: 0 1 2 3 4
enter row 2: 4 0 1 2 3
enter row 3: 3 4 0 1 2
enter row 4: 2 3 4 0 1
enter row 5: 1 2 3 4 0
isConsecutiveFour(values) = true
enter rows and columns: 5 5
enter row 1: 1 2 3 4 5
enter row 2: 1 2 3 4 5
enter row 3: 0 0 0 0 0
enter row 4: 1 2 3 4 5
enter row 5: 1 2 3 4 5
isConsecutiveFour(values) = true
enter rows and columns: 5 5
enter row 1: 1 2 0 3 4
enter row 2: 1 2 0 3 4
enter row 3: 2 1 0 4 3
enter row 4: 1 2 0 3 4
enter row 5: 1 2 0 3 4
isConsecutiveFour(values) = true
而且,这些应该会失败。
enter rows and columns: 5 5
enter row 1: 1 2 3 4 5
enter row 2: 5 4 3 2 1
enter row 3: 0 1 0 1 0
enter row 4: 5 4 3 2 1
enter row 5: 1 2 3 4 5
isConsecutiveFour(values) = false
enter rows and columns: 3 3
enter row 1: 1 1 1
enter row 2: 1 1 1
enter row 3: 1 1 1
isConsecutiveFour(values) = false
测试用例
enter rows and columns: 6 7
enter row 1: 0 1 0 3 1 6 1
enter row 2: 0 1 6 8 6 0 1
enter row 3: 5 6 2 1 8 2 9
enter row 4: 6 5 6 1 1 9 1
enter row 5: 1 3 6 1 4 0 7
enter row 6: 3 3 3 3 4 0 7
isConsecutiveFour(values) = true
评论
0赞
Silly Piggy
6/9/2023
我很感激你的帮助!我目前拥有穴居人的大脑,但我会尽我所能学习这段代码在做什么并从中工作!另外,感谢您的样品运行,我的作业从未有过,我无法想象发生了什么
0赞
Silly Piggy
6/11/2023
哦,哎呀,我还有另一个问题,如何进行 6 x 7 输入?当我输入该数量的行和列时,我在作业中得到了错误的答案和数字?我使用了这个链接中的第一个框 media.cheggcdn.com/media/50c/...并且由于某种原因而变得错误?
0赞
Reilas
6/11/2023
我无法使该链接正常工作。你能发布输入数据吗?
0赞
Silly Piggy
6/11/2023
输入行和列: 6 7 输入行 1: 0 1 0 3 1 6 1 输入行 2: 0 1 6 8 6 0 1 输入行 3: 5 6 2 1 8 2 9 输入行 4: 6 5 6 1 1 9 1 输入行 5: 1 3 6 1 4 0 7 输入第 6 行: 3 3 3 3 4 0 7 当我输入这些数字时,我得到了假的
评论