Task: I have two dimensional array of chars filled with random values [a-z] and need to find if the word ala appears vertically, horizontally or diagonally in it.
In my program, I go through all characters and try to find word in all dimensions.
I feel there is more intelligent way to do this task which will:
- Work with words of different length without hard-coding.
- Replace bunch of if statements so it will be easier.
Any advice?
import java.util.Random;
public class Ala {
public static void main(String[] args) {
Random randomGenerator = new Random();
char[][] arr = new char[50][50];
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = (char) (randomGenerator.nextInt(26)+97);
}
}
for (int i = 0; i < arr.length; i++) {
System.out.printf("%-3d", i);
}
System.out.println();
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
boolean ala = false;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (j>1) {
if (arr[i][j] == 'a' && arr[i][j - 1] == 'l' && arr[i][j - 2] == 'a') {//left
ala = true;
System.out.println(i + " " + j);
}
}
if (j<arr[i].length-2) {
if (arr[i][j] == 'a' && arr[i][j + 1] == 'l' && arr[i][j + 2] == 'a') {//rigth
ala = true;
System.out.println(i + " " + j);
}
}
if (i<arr.length-2) {
if (arr[i][j] == 'a' && arr[i + 1][j] == 'l' && arr[i + 2][j] == 'a') {//bot
ala = true;
System.out.println(i + " " + j);
}
}
if (i>1) {
if (arr[i][j] == 'a' && arr[i-1][j] == 'l' && arr[i - 2][j] == 'a') {//top
ala = true;
System.out.println(i + " " + j);
}
}
if (i<arr.length-2 && j<arr[i].length-2) {
if (arr[i][j] == 'a' && arr[i + 1][j + 1] == 'l' && arr[i + 2][j + 2] == 'a') {//bot&rigth
ala = true;
System.out.println(i + " " + j);
}
}
if (i>1 && j>1) {
if (arr[i][j] == 'a' && arr[i - 1][j - 1] == 'l' && arr[i - 2][j - 2] == 'a') {//top&left
ala = true;
System.out.println(i + " " + j);
}
}
if (i>1 && j<arr[i].length-2) {
if (arr[i][j] == 'a' && arr[i - 1][j + 1] == 'l' && arr[i - 2][j + 2] == 'a') {//top&rigth
ala = true;
System.out.println(i + " " + j);
}
}
if (i<arr.length-2 && j>1) {
if (arr[i][j] == 'a' && arr[i + 1][j - 1] == 'l' && arr[i + 2][j - 2] == 'a') {//bot&left
ala = true;
System.out.println(i + " " + j);
}
}
}
}
System.out.println(ala);
}
}