因此,指令将创建一个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;
}
}
}
}
}
我的总体思路基本上是在检查相等的数字时遍历大矩阵的索引,如果找到一个相等的例程,则例程继续执行,否则将中断,并转到大矩阵中的下一个索引。
答案 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+"]");
}
}
}
}