Java 分配解决方案请求:连续相等的数字

Java Assignment Solution Request: Consecutive Equal Numbers

提问人:Silly Piggy 提问时间:6/9/2023 最后编辑:shmoselSilly Piggy 更新时间:6/11/2023 访问量:90

问:

这个 java 作业让我大吃一惊,我希望有人能帮我解决这个问题,并解释他们是如何找到答案的?我已经尝试了几个小时来理解它:/这太臭了!

作业:连续相等的数字

问题描述:

编写以下函数,用于测试二维列表是否具有四个相同值的连续数字,可以是水平、垂直还是对角线。

public static boolean isConsecutiveFour(int[][] values) 

编写一个测试程序,提示用户输入二维列表的行数和列数,然后输入列表中的值。程序将显示 发现连续出现四次 n。 如果列表包含四个连续数字,其值为 n。否则,它将显示 没有发现连续出现四次。

我几乎试图理解数组,但有太多的术语和数字,它摧毁了我的思想:/

Java 数组 循环 输入 数字

评论

2赞 Martin del Necesario 6/9/2023
我理解你的绝望。编程的开始可能非常可怕。然而,如果你只是给一个任务并要求他们为你解决它,Stackoverflow 上的人不会感激。你能写更多关于你有什么问题,你尝试了什么方法,你在哪里被卡住了......?我还建议你用谷歌搜索更多你不明白的东西。互联网上充满了适合初学者的资源。
0赞 Reilas 6/9/2023
好问题。如果您在编码时不经常使用该主题,这些可能会令人困惑。您需要使用 for 循环和条件检查。
0赞 Silly Piggy 6/9/2023
我在网上找到了几个答案,但一直在为数组的工作方式而苦苦挣扎。由于某种原因,我的任务中也没有给出样品运行,这绝对让我失望。但值得庆幸的是,我们给出了一个解决方案,我将努力从中学习和工作!:)
0赞 Reilas 6/9/2023
这是关于数组的 Java 教程。数组(™学习 Java 语言> Java 教程>语言基础知识)。

答:

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赞 Reilas 6/9/2023
当然,没问题。Java 在这里提供了一个教程,而且 JavaDoc 文档总是足智多谋。
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 当我输入这些数字时,我得到了假的