Sunday, 28 August 2016

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


**8.19 (Pattern recognition: four consecutive equal numbers) Write the following method that tests whether a two-dimensional array has four consecutive num- bers of the same value, either horizontally, vertically, or diagonally.
public static boolean isConsecutiveFour(int[][] values)

Write a test program that prompts the user to enter the number of rows and col- umns of a two-dimensional array and then the values in the array and displays true if the array contains four consecutive numbers with the same value. Other- wise, display false. Here are some examples of the true cases:


import java.util.Scanner;
 
 
 
import java.util.Scanner;
 
 
 
public class ProgrammingEx8_19 {
 
 public static void main(String[] args) {
 
  Scanner input = new Scanner(System.in);
  System.out.println("Enter number of rows and column: ");
  int[][] n = new int[input.nextInt()][input.nextInt()];
  System.out.println("Enter the values in the array:");
 
  for (int i = 0; i < n.length; i++) {
   for (int j = 0; j < n[i].length; j++) {
    n[i][j] = input.nextInt();
   }
 
  }
   
 System.out.println(isConsecutiveFour(n));
    
   
 
 }
 
 public static boolean isConsecutiveFour(int[][] values) {
  return checkVer(values)||checkHor(values) || checkDia(values);
 }
 
 public static boolean checkVer(int[][] values) {
  // Going through the array vertically
 
  for (int i = 0; i < values[0].length; i++) {
   int start = values[0][i];
   int count = 1;
   for (int j = 1; j < values.length; j++) {
    if (start == values[j][i]) {
     count++;
    } else {
     start = values[j][i];
     count = 1;
    }
 
    if (count == 4) {
     return true;
    }
   }
  }
 
  return false;
 
 }
 
 public static boolean checkHor(int[][] values) {
 
  // Going through the array horizontally
  
  for (int i = 1; i < values.length; i++) {
   int start = values[i][0];
   int count = 1;
   for (int j = 1; j < values[i].length; j++) {
    if (start == values[i][j]) {
     count++;
    } else {
     start = values[i][j];
     count = 1;
    }
 
    if (count == 4) {
     return true;
    }
   }
  }
 
  return false;
 
 }
 
 public static boolean checkDia(int[][] values) {
 
  // From upper left to lower right
  // Go through the row
   
  for (int i = 0; i < values.length; i++) {
   int start = values[i][0];
   int count = 1;
   for (int j = i+1, k = 1; j < values.length && k < values[0].length; j++, k++) {
    if (start == values[j][k]) {
     count++;
    } else {
     start = values[j][k];
     count = 1;
    }
    if (count == 4) {
     return true;
    }
   }
  }
 
  // Going through the column
   
  for (int i = 0; i < values[0].length; i++) {
   int start = values[0][i];
   int count = 1;
   for (int j = i+1, k = 1; j < values[0].length && k < values.length; j++, k++) {
    if (start == values[k][j]) {
     count++;
    } else {
     start = values[k][j];
     count = 1;
    }
 
    if (count == 4) {
     return true;
    }
   }
  }
 
  // From upper right to lower left
  // Go through the column
   
  for (int i = 0; i < values[0].length; i++) {
   int start = values[0][i];
   int count = 1;
   for (int j = 1, k = i-1; j < values.length && k >= 0; j++, k--) {
    if (start == values[j][k]) {
     count++;
    } else {
     start = values[j][k];
     count = 1;
    }
    if (count == 4) {
     return true;
    }
   }
  }
 
  // Going through the row
   
  for (int i = 0; i < values.length; i++) {
   int start = values[i][values[i].length-1];
   int count = 1;
   for (int j = i+1, k = values[0].length-2; j < values.length && k >= 0; j++, k--) {
    if (start == values[j][k]) {
     count++;
    } else {
     start = values[j][k];
     count = 1;
    }
    if (count == 4) {
     return true;
    }
   }
  }
   
  return false;
 
 }
 
}

No comments :

Post a Comment