## Sunday, 28 August 2016

### Chapter 8 Exercise 14, Introduction to Java Programming, Tenth Edition Y. Daniel LiangY.

**8.14 (Explore matrix) Write a program that prompts the user to enter the length of a square matrix, randomly fills in 0s and 1s into the matrix, prints the matrix, and finds the rows, columns, and diagonals with all 0s or 1s. Here is a sample run of the program: Enter the size for the matrix: 4 0111 0000 0100 1111 All 0s on row 1 All 1s on row 3 No same numbers on a column No same numbers on the major diagonal No same numbers on the sub-diagonal

import java.util.Scanner;

public class ProgrammingEx8_14 {

public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter the size for the matrix: ");
int intSize = input.nextInt();

int[][] intMetrix = new int[intSize][intSize];
fillMetrix(intMetrix);
displayMetrix(intMetrix);
checkMetrix(intMetrix);
}

public static int intRandom(int lowerBound, int upperBound) {
return (int) (lowerBound + Math.random()
* (upperBound - lowerBound + 1));
}

public static void fillMetrix(int metrix[][]) {
for (int i = 0; i < metrix.length; i++) {
for (int j = 0; j < metrix[i].length; j++) {
metrix[i][j] = intRandom(0, 1);
}

}

}

public static void checkMetrix(int metrix[][]) {

boolean blnFound = false;
// Checking row
for (int i = 0; i < metrix.length; ++i) {
int intResult = checkRow(i, metrix);
if (intResult != 2) {
blnFound = true;
System.out.println("All " + intResult + "s on row " + i);
}
}

if (blnFound == false) {

System.out.println("No same numbers on a row");
}

// Checking column
blnFound = false;
for (int i = 0; i < metrix.length; ++i) {
int intResult = checkCol(i, metrix);
if (intResult != 2) {
blnFound = true;
System.out.println("All " + intResult + "s on column " + i);
}
}

if (blnFound == false) {

System.out.println("No same numbers on a column");
}

// Checking major diagonals

int intMajor = checkMajorDia(metrix);
int intMinor = checkMinorDia(metrix);

if (intMajor != 2) {
System.out.println("All " + intMajor + "s on major diagonal");
} else {
System.out.println("No same numbers on the major diagonal");
}

if (intMinor != 2) {
System.out.println("All " + intMinor + "s on sub-diagonal");
} else {
System.out.println("No same numbers on the sub-diagonal");
}

}

public static void displayMetrix(int metrix[][]) {

for (int i = 0; i < metrix.length; i++) {
for (int j = 0; j < metrix[i].length; j++) {
System.out.print(metrix[i][j]);
}

System.out.println("");
}

}

// Return 2 if the row is not repeating. Return number 0 or one if it is
public static int checkRow(int intRow, int intMetrix[][]) {

for (int i = 1; i < intMetrix[intRow].length; i++) {
if (intMetrix[intRow][i] != intMetrix[intRow][0])
return 2;
}
return intMetrix[intRow][0];

}

public static int checkCol(int intCol, int intMetrix[][]) {
for (int i = 1; i < intMetrix.length; i++) {
if (intMetrix[i][intCol] != intMetrix[0][intCol])
return 2;
}
return intMetrix[0][intCol];
}

// Check major diagonal where i = j or from top left to lower right
public static int checkMajorDia(int intMetrix[][]) {
for (int i = 1; i < intMetrix.length; i++) {
if (intMetrix[i][i] != intMetrix[0][0])
return 2;
}
return intMetrix[0][0];
}

// Check major diagonal where i = metrix size - i or from lower left to
// upper right
public static int checkMinorDia(int intMetrix[][]) {
int intSize = intMetrix.length - 1;
for (int i = 1; i < intMetrix.length; i++) {
if (intMetrix[i][intSize - i] != intMetrix[0][intSize])
return 2;
}
return intMetrix[0][0];
}

}