2016-09-22 35 views
1

我已经创建了一个长度相同的2维数组,并且它例如随机填充1和0。比较行和列中的元素,在这种情况下是1和0

0100 
0010 
1110 
1111 

如何编写程序找到对角线所有的1和0

这是我到目前为止的代码:

public class Test2dArray { 
    public static void main(String[] args) {   
     int row,column; 
     System.out.print("Enter the lenghth of matrix:"); 
     Scanner input = new Scanner(System.in); 
     Random rand = new Random(); 
     int mSize = input.nextInt(); 
     int [][] mArray = new int [mSize][mSize]; 

     for (row=0; row < mSize; row++){ 
      for(column=0; column < mSize; column++){     
       mArray[row][column]=rand.nextInt(2); 
       System.out.print(mArray[row][column]+ " "); 
      } 
      System.out.println(); 
     } 
    } 
} 
+2

___'Java'!=='JavaScript' ___ – Rayon

回答

0

代码是不完美的(我敢肯定它可以优化),但它的工作原理

public static void main (String[] args) throws java.lang.Exception { 
    int row = 5; 
    int column = 5; 

    int [][] mArray = fillArray(row, column); 
    System.out.println("Rows: " + findRows(mArray)); 
    System.out.println("Columns: " + findColumns(mArray)); 
    System.out.println("Diags: " + findDiags(mArray)); 
} 

private static ArrayList<Integer> findRows(int [][] mArray) { 
    ArrayList<Integer> result = new ArrayList<Integer>(); 
    for (int i = 0; i < mArray.length; i++){ 
     boolean isRow = true; 
     for(int j = 0; j < mArray[0].length; j++){     
      if (j > 0 && mArray[i][j] != mArray[i][j - 1]) { 
       isRow = false; 
       break; 
      } 
     } 
     if (isRow) result.add(i); 
    } 
    return result; 
} 

private static ArrayList<Integer> findColumns(int [][] mArray) { 
    ArrayList<Integer> result = new ArrayList<Integer>(); 
    for (int j = 0; j < mArray[0].length; j++){ 
     boolean isColumn = true; 
     for(int i = 0; i < mArray.length; i++){     
      if (i > 0 && mArray[i][j] != mArray[i - 1][j]) { 
       isColumn = false; 
       break; 
      } 
     } 
     if (isColumn) result.add(j); 
    } 
    return result; 
} 

private static ArrayList<Integer> findDiags(int [][] mArray) { 
    ArrayList<Integer> result = new ArrayList<Integer>(); 
    for (int i = 1; i < mArray.length; i++) { 
     boolean isDiag = true; 
     for (int j = 0; j < i; j++) { 
      if (mArray[i - j][j] != mArray[i - j - 1][j + 1]) { 
       isDiag = false; 
       break; 
      } 
     } 
     if (isDiag) result.add(i); 
    } 
    for (int i = 0; i < mArray.length - 2; i++) { 
     boolean isDiag = true; 
     for (int j = i + 1; j < mArray.length - 1; j++) { 
      if (mArray[mArray.length - j + i][j] != mArray[mArray.length - j + i - 1][j + 1]) { 
       isDiag = false; 
       break; 
      } 
     } 
     if (isDiag) result.add(mArray.length + i); 
    } 

    return result; 
} 

private static int[][] fillArray(int row, int column) { 
    int [][] mArray = new int [row][column]; 

    Random rand = new Random(); 
    for (int i = 0; i < row; i++){ 
     for(int j = 0; j < column; j++){     
      mArray[i][j] = rand.nextInt(2); 
      System.out.print(mArray[i][j] + " "); 
     } 
     System.out.println(); 
    } 

    return mArray; 
} 
0

迭代并为每个行和列,并将值总和为rowSumcolumSum。 所以:

if (rowSum == mSize) 
     System.out.print("The row "+i+"is full of ones"); 
    if (rowSum == 0) 
     System.out.print("The row "+i+"is full of zeros"); 

而同样的,显然,对于列和对角线。