【问题标题】:How to use conditional statement to check whether array equal to a row of matrix?如何使用条件语句检查数组是否等于一行矩阵?
【发布时间】:2015-08-29 18:29:31
【问题描述】:

我有一个 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);
}

但它不能很好地工作,因为它总是继续检查直到最后一行。
还有其他更好的主意吗?非常感谢。

【问题讨论】:

    标签: java arrays matrix


    【解决方案1】:

    首先, 如果任何值连续不同, 那么你想跳到外循环的下一次迭代。 你可以通过给外部循环一个标签来做到这一点, 和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;
            }
        }
    

    【讨论】:

      【解决方案2】:

      您有两个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;
          }
      }
      

      【讨论】:

        【解决方案3】:

        您可以简单地使用Arrays.equals()

        private int[][] matrix;
        
        public boolean equalsRow(int[] row, int index) {
          return Arrays.equals(row, matrix[index]);
        }
        

        【讨论】:

          【解决方案4】:
              private int[][] myArray;
          
              public boolean equalsRow(int[] row, int x) 
              {
                 return Arrays.equals(row, myArray[x]);
              }
          

          更简单

          【讨论】:

            【解决方案5】:
            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);
            }
            

            【讨论】:

              猜你喜欢
              • 2023-01-02
              • 1970-01-01
              • 2015-07-01
              • 2021-11-10
              • 2021-12-30
              • 2012-07-22
              • 2015-12-14
              • 2011-06-26
              • 2017-11-07
              相关资源
              最近更新 更多