我有一个int类型的数组,我想检查一下这个数组的所有元素是否等于m×n矩阵的第i行的元素。例如:
array={5,0,2,3};
和
matrix={{1,3,2,2}{5,0,2,3}{2,1,2,9}};
所以,如果
array[j] = matrix[i][j];
所有j=0,1,2
然后
print("the wanted i is: "+i);
我写了这段代码:
public static void main(String[] args){
int i, j, m=3, n=4;
int[][] A0 = {{0,2,2,5},{2,0,3,1},{0,2,0,5}};
int[] A={0,2,0,5};
int seq = 0;
for(i=0;i<m;i++){
for(j=0;j<n;j++){
if(A[j] != A0[i][j]){
break;
}
seq= i;
}
}
System.out.print(seq);
}
但它不能很好地工作,因为它总是继续检查直到最后一行 还有其他更好的主意吗?非常感谢。
答案 0 :(得分:2)
首先,
如果任何值连续不同,
那么你想跳到外循环的下一次迭代。
你可以通过给外部循环一个标签来做到这一点,
和continue
声明。
其次, 一旦找到所有值匹配的行, 你可以突破外圈。
OUT: for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
if (A[j] != A0[i][j]) {
continue OUT;
}
}
seq = i;
break;
}
通过使用Arrays.equals
,你可以简化很多,
通过消除内环,
所有的标签+继续黑魔法:
for (i = 0; i < m; i++) {
if (Arrays.equals(A, A0[i])) {
seq = i;
break;
}
}
答案 1 :(得分:1)
您有两个for
条件。所以当你到达 p>
if(A[j] != A0[i][j]) {
break;
}
你将打破唯一的for循环,所以你将继续另一个循环:
for(i=0;i<m;i++) {
所以你必须打破这个,这是一个解决方案
boolean canBreak = false;
for(i=0;i<m;i++) {
for(j=0;j<n;j++) {
if(A[j] != A0[i][j]) {
canBreak = true;
break;
}
if (canBreak) break;
seq= i;
}
}
答案 2 :(得分:1)
您只需使用Arrays.equals()
private int[][] matrix;
public boolean equalsRow(int[] row, int index) {
return Arrays.equals(row, matrix[index]);
}
答案 3 :(得分:1)
private int[][] myArray;
public boolean equalsRow(int[] row, int x)
{
return Arrays.equals(row, myArray[x]);
}
简单
答案 4 :(得分:1)
public static void main(String[] args){
int i, j, m=3, n=4;int ct=0;
int[][] A0 = {{0,2,2,5},{2,0,3,1},{0,2,0,5}};
int[] A={0,2,0,5};
int seq = 0;
for(i=0;i<m;i++){
for(j=0;j<n;j++){
if(A[j] == A0[i][j]){
ct++;
}
else
{
break;
}
}
if(ct==4)
{
seq=i;
break;
}
ct=0;
}
System.out.print(seq);
}