Here is my code, its a boggle game, you enter a word and it validates if the wor
ID: 3539344 • Letter: H
Question
Here is my code, its a boggle game, you enter a word and it validates if the word is a on the board, can someone show me how to make the validation use recursion?
import java.util.*;
public class boggleBoard
{
static String[][] Board=new String[4][4];
static int[][] Visit= new int[4][4];
public static void fillArray(int seed){
Random rand = new Random(seed);
for(int i=0;i<4;i++)
{
System.out.println("+-----+ +-----+ +-----+ +-----+");
for(int j=0;j<4;j++)
{
char randomAlphabets=(char)(rand.nextInt(26) + 'A');
Board[i][j]=Character.toString(randomAlphabets);
Visit[i][j]=-1;
System.out.print("| "+Board[i][j]+" | ");
}
System.out.println();
}
System.out.println("+-----+ +-----+ +-----+ +-----+");
}
public static void printFilled()
{
System.out.println("Nice Job!");
for(int i=0;i<4;i++)
{
System.out.println("+-----+ +-----+ +-----+ +-----+");
for(int j=0;j<4;j++)
{
if(Visit[i][j]==1)
{
System.out.print("| <"+Board[i][j]+"> | ");
// Visit[i][j]=-1;
}
else
{
System.out.print("| "+Board[i][j]+" | ");
}
}
System.out.println();
}
System.out.println("+-----+ +-----+ +-----+ +-----+");
}
public static void startGame()
{
int seed;
Scanner in = new Scanner(System.in);
System.out.println("Enter seed");
seed =in.nextInt();
fillArray(seed);
while(true)
{
System.out.println("Enter the word (in Uppercase):");
String str=in.next();
if(checkSol(str))
{
printFilled();
}
else
{
System.out.println("I don't see that word.");
}
if(isPalindrome(str))
{
System.out.println("The word "+str+" is a palindrome");
}
else
{
System.out.println("The word "+str+" is not a palindrome");
}
int choice1=1;
while((true)&&(choice1==1))
{
System.out.println("Do you want to play on same board ?(yes/no)");
String choice=in.next();
if(choice.equals("yes"))
{
choice1=2;
break;
}
if(choice.equals("no"))
{
choice1=3;
break;
}
else
{
choice1=1;
}
}
if(choice1==3)
{
break;
}
}
}
private static boolean validateWord(String a,int x,int y)
{
if(!a.substring(0,1).equals(Board[x][y]))
{
return false;
}
if(a.length()==1)
{
Visit[x][y]=1;
return true;
}
else
{
Visit[x][y]=1;
if((x<=2)&&(x>=1)&&(y<=2)&&(y>=1))
{
if(a.substring(1, 2).equals(Board[x+1][y]))
{
Visit[x+1][y]=1;
return validateWord(a.substring(1, a.length()),x+1,y);
}
if(a.substring(1, 2).equals(Board[x-1][y]))
{
return validateWord(a.substring(1, a.length()),x-1,y);
}
if(a.substring(1, 2).equals(Board[x][y+1]))
{
return validateWord(a.substring(1, a.length()),x,y+1);
}
if(a.substring(1, 2).equals(Board[x][y-1]))
{
return validateWord(a.substring(1, a.length()),x,y-1);
}
}
else if((x<1)&&(y<=2)&&(y>=1))
{
if(a.substring(1, 2).equals(Board[x+1][y]))
{
return validateWord(a.substring(1, a.length()),x+1,y);
}
if(a.substring(1, 2).equals(Board[x][y+1]))
{
return validateWord(a.substring(1, a.length()),x,y+1);
}
if(a.substring(1, 2).equals(Board[x][y-1]))
{
return validateWord(a.substring(1, a.length()),x,y-1);
}
}
else if((x>2)&&(y<=2)&&(y>=1))
{
if(a.substring(1, 2).equals(Board[x-1][y]))
{
return validateWord(a.substring(1, a.length()),x-1,y);
}
if(a.substring(1, 2).equals(Board[x][y+1]))
{
return validateWord(a.substring(1, a.length()),x,y+1);
}
if(a.substring(1, 2).equals(Board[x][y-1]))
{
return validateWord(a.substring(1, a.length()),x,y-1);
}
}
else if((y<1)&&(x<=2)&&(x>=1))
{
if(a.substring(1, 2).equals(Board[x-1][y]))
{
return validateWord(a.substring(1, a.length()),x-1,y);
}
if(a.substring(1, 2).equals(Board[x][y+1]))
{
return validateWord(a.substring(1, a.length()),x,y+1);
}
if(a.substring(1, 2).equals(Board[x+1][y]))
{
return validateWord(a.substring(1, a.length()),x+1,y);
}
}
else if((y>2)&&(x<=2)&&(x>=1))
{
if(a.substring(1, 2).equals(Board[x-1][y]))
{
return validateWord(a.substring(1, a.length()),x-1,y);
}
if(a.substring(1, 2).equals(Board[x][y-1]))
{
return validateWord(a.substring(1, a.length()),x,y-1);
}
if(a.substring(1, 2).equals(Board[x+1][y]))
{
return validateWord(a.substring(1, a.length()),x+1,y);
}
}
else if((x==0)&&(y==0))
{
if(a.substring(1, 2).equals(Board[0][1]))
{
return validateWord(a.substring(1, a.length()),0,1);
}
if(a.substring(1, 2).equals(Board[1][0]))
{
return validateWord(a.substring(1, a.length()),1,0);
}
}
else if((x==3)&&(y==0))
{
if(a.substring(1, 2).equals(Board[2][0]))
{
return validateWord(a.substring(1, a.length()),2,0);
}
if(a.substring(1, 2).equals(Board[3][1]))
{
return validateWord(a.substring(1, a.length()),3,1);
}
}
else if((x==0)&&(y==3))
{
if(a.substring(1, 2).equals(Board[0][2]))
{
return validateWord(a.substring(1, a.length()),0,2);
}
if(a.substring(1, 2).equals(Board[1][3]))
{
return validateWord(a.substring(1, a.length()),1,3);
}
}
else if((x==3)&&(y==3))
{
if(a.substring(1, 2).equals(Board[2][3]))
{
return validateWord(a.substring(1, a.length()),2,3);
}
if(a.substring(1, 2).equals(Board[3][2]))
{
return validateWord(a.substring(1, a.length()),3,2);
}
}
return false;
}
}
public static boolean checkSol(String str){
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(validateWord(str,i,j))
{
return true;
}
}
}
return false;
}
public static boolean isPalindrome(String str)
{
if(str.length()==1)
{
return true;
}
else if(str.length()==2)
{
if(str.substring(0, 1).equals(str.substring(1, 2)))
{
return true;
}
return false;
}
else
{
if(str.substring(0, 1).equals(str.substring(str.length()-1, str.length())))
{
return isPalindrome(str.substring(1, str.length()-1));
}
return false;
}
}
}
Explanation / Answer
A yet smaller implementation:
import java.util.*;
public class boggleBoard
{
static String[][] Board=new String[4][4];
static int[][] Visit= new int[4][4];
public static void main(String[] args){
boggleBoard.startGame();
}
public static void fillArray(int seed){
Random rand = new Random(seed);
for(int i=0;i<4;i++)
{
System.out.println("+-----+ +-----+ +-----+ +-----+");
for(int j=0;j<4;j++)
{
char randomAlphabets=(char)(rand.nextInt(26) + 'A');
Board[i][j]=Character.toString(randomAlphabets);
Visit[i][j]=-1;
System.out.print("| "+Board[i][j]+" | ");
}
System.out.println();
}
System.out.println("+-----+ +-----+ +-----+ +-----+");
}
public static void printFilled()
{
System.out.println("Nice Job!");
for(int i=0;i<4;i++)
{
System.out.println("+-----+ +-----+ +-----+ +-----+");
for(int j=0;j<4;j++)
{
if(Visit[i][j]==1)
{
System.out.print("| <"+Board[i][j]+"> | ");
// Visit[i][j]=-1;
}
else
{
System.out.print("| "+Board[i][j]+" | ");
}
}
System.out.println();
}
System.out.println("+-----+ +-----+ +-----+ +-----+");
}
public static void startGame()
{
int seed;
Scanner in = new Scanner(System.in);
System.out.println("Enter seed");
seed =in.nextInt();
fillArray(seed);
while(true)
{
System.out.println("Enter the word (in Uppercase):");
String str=in.next();
if(checkSol(str))
{
printFilled();
}
else
{
System.out.println("I don't see that word.");
}
if(isPalindrome(str))
{
System.out.println("The word "+str+" is a palindrome");
}
else
{
System.out.println("The word "+str+" is not a palindrome");
}
int choice1=1;
while((true)&&(choice1==1))
{
System.out.println("Do you want to play on same board ?(yes/no)");
String choice=in.next();
if(choice.equals("yes"))
{
choice1=2;
break;
}
if(choice.equals("no"))
{
choice1=3;
break;
}
else
{
choice1=1;
}
}
if(choice1==3)
{
break;
}
}
}
private static boolean checkValid(int i, int j){
if(i>=0 && i<=3)
if(j>=0 && j<=3)
return true;
return false;
}
private static boolean setVal(int i, int j){
Visit[i][j] = 1;
return true;
}
private static boolean validateWord(String a, int x, int y){
boolean answer = false;
if(a.length()==1)
if(a.substring(0).equals(Board[x][y]))
return setVal(x, y);
else
return false;
else if(a.substring(0,1).equals(Board[x][y])){
int p = x-1;
int q = y-1;
for(int i=0; i<3; i++)
for(int j=0; j<3; j++){
if(i==1 && j==1)
continue;
if(checkValid(p+i, q+j)){
answer = validateString(a.substring(1), p+i, q+j);
if(answer == true)
return setVal(p+1, q+1);
}
}
}
return false;
}
public static boolean checkSol(String str){
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(validateWord(str,i,j))
{
return true;
}
}
}
return false;
}
public static boolean isPalindrome(String str)
{
if(str.length()==1)
{
return true;
}
else if(str.length()==2)
{
if(str.substring(0, 1).equals(str.substring(1, 2)))
{
return true;
}
return false;
}
else
{
if(str.substring(0, 1).equals(str.substring(str.length()-1, str.length())))
{
return isPalindrome(str.substring(1, str.length()-1));
}
return false;
}
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.