关于包含另一个矩阵的Matrix的家庭作业(检查是对还是错)

时间:2019-04-13 20:23:03

标签: java matrix

因此,指令将创建一个10x10的矩阵,并为每个索引随机化1〜20之间的值 然后要求用户输入1到20之间的6个数字,并使用这些数字创建 另一个2x3矩阵。 然后,程序必须检查10x10矩阵是否包含用户的2x3矩阵。 另外,我不允许使用函数。

输入示例:

在矩阵中输入1:17 在矩阵中输入2号:17 在矩阵中输入3号:17 在矩阵中输入4号:5 在矩阵中输入数字5:13 在矩阵中输入6号:14

输出:

随机矩阵:

14 14 3 18 2 10 19 10 3 3

2 17 15 16 5 17 7 17 15 10

13 1 3 9 5 4 11 9 1 8

17 14 13 9 8 1 18 3 17 18

12 17 5 14 13 4 16 14 13 4

8 12 8 19 6 5 3 3 14 18

16 16 17 9 9 10 17 3 8 5

13 8 6 17 6 17 17 7 19 5

5 14 6 15 11 11 13 17 17 17

17 13 13 18 11 4 15 5 13 14

您输入的矩阵:

17 17 17

5 13 14

随机矩阵包含用户矩阵。

到目前为止我的代码=

            int[][] big = new int[10][10];
            int[][] small =new int [][] {{the1,the2,the3},{the4,the5,the6}};

            for(int i = 0; i < big.length; i++ )
            {
                for(int j = 0; j < big[i].length; j++)
                {
                    big[i][j]= (int)((Math.random()*20)+1);

                }

            }
            for(int i =0; i < big.length; i++)
            {
                for(int j = 0; j < big.length; j++)
                {
                    Boolean isEqual=true;
                    for(int k = 0; k < 2 && isEqual; k++)
                    {
                        for(int m = 0; m < 3; m++)
                        {
                            if (big[i+k][j+m]!=small[k][m])
                            {
                                isEqual=false;
                                break;
                            }
                        }
                    }
                }
            }

我的总体思路基本上是在检查相等的数字时遍历大矩阵的索引,如果找到一个相等的例程,则例程继续执行,否则将中断,并转到大矩阵中的下一个索引。

1 个答案:

答案 0 :(得分:0)

您的总体思路是正确的,应该适用于所描述的方案。您遇到的唯一问题是您的break语句确实按您的想法工作。

根据嵌套循环,如果在内部循环中放置break语句,则编译器将从内部循环跳出并再次继续外部循环。如果您需要使用内部循环内部给出的break语句从外部循环跳出,则可以使用带标签的循环,即为您的循环命名并与break语句一起使用。

在上面的代码中,您不仅打破了最里面的循环,而且打破了上面的循环:

    public static void main(String[] args) {
        int[][] big = new int[10][10];
        int[][] small = new int[][]{{12, 13, 14}, {13, 14, 15}};
        for (int i = 0; i < big.length; i++) {
            for (int j = 0; j < big[i].length; j++) {
                big[i][j]= (int)((Math.random()*20)+1);
            }
        }
        // just added this loop to print the random array so you can check the output
        for(int[] row : big){
            System.out.println(Arrays.toString(row));
        }
        for(int i = 0; i<big.length-1; i++){
            for(int j = 0; j<big[0].length-2; j++){
                boolean isEqual = true;
  LoopIwannaBreak:for(int k = 0; k<small.length; k++){
                    for(int m = 0; m<small[0].length; m++){
                        if(big[i+k][j+m] != small[k][m]){
                            isEqual = false;
                            break LoopIwannaBreak;
                        }
                    }
                }
                // added this to tell at which index the match was found
               if(isEqual){
                   System.out.println("found at big["+i+"]["+j+"]");
               }
            }
        }
    }