我想讓我的程序運行。但是,我得到一個NullPointerException
。程序不會運行,Java,StringBuilder,數組
任何幫助,將不勝感激。我不想包含太多的代碼;所以,我只包括日食說錯的塊。
這是拼圖類的構造函數。 (java.lang.NullPointerException)
我更正了第一個問題,並添加了「StringBuilder puzzle = new StringBuilder();.」我現在在同一行上得到這些錯誤。 55
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.AbstractStringBuilder.setCharAt(Unknown Source)
at java.lang.StringBuilder.setCharAt(Unknown Source)
at Puzzle.<init>(Puzzle.java:55)
at PuzzleGameConsole.main(PuzzleGameConsole.java:22)
線是原來的問題行。它標誌着以「//月食這一行有一個錯誤」
代碼:
public class Puzzle
{
private StringBuilder puzzle;
public Puzzle(String theSolution)
{
for (int index = 0; index < theSolution.length(); index++)
{
if (theSolution.charAt(index) != ' ')
{
puzzle.setCharAt(index, '-'); //eclipse had an error on this line
}
else if (theSolution.charAt(index) == ' ')
{
puzzle.setCharAt(index, ' ');
}
}
}
}
public int guessLetter(char letter)
{
int count = 0;
for(int index = 0; index < solution.length(); index++)
{
if(Character.toUpperCase(letter) == solution.toUpperCase().charAt(index))
{
if (puzzle.charAt(index) == '-')
{
puzzle.setCharAt(index, letter);
}
else
{
count = 0;
break;
}
count++;
}
}
return count;
}
public String getPuzzle()
{
return "";
}
public boolean solvePuzzle(String guess)
{
if(guess.toUpperCase().equals(solution.toUpperCase()))
{
return true;
}
else
{
return false;
}
}
}
測試是貼在下面。它沒有問題。
import java.util.Arrays;
import java.util.Scanner;
public class PuzzleGameConsole
{
private static final String NEWLINE = "\n";
private static final String MENU = "(1) GUESS A LETTER (2) SOLVE THE PUZZLE (3) QUIT >> ";
private static final String PROMPT_ENTER_LETTER = "\nENTER A LETTER> ";
private static final String PROMPT_SOLVE_PUZZLE = "\nSOLVE THE PUZZLE> ";
private static final int SELCTION_ENTER_LETTER = 1;
private static final int SELCTION_SOLVE_PUZZLE = 2;
private static final int SELCTION_QUIT = 3;
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
Puzzle puzzle = new Puzzle("JAVA IS FUN");
int selection = 0;
while(selection != SELCTION_QUIT)
{
System.out.printf("PUZZLE: %s\n\n", puzzle.getPuzzle());
System.out.print(MENU);
selection = in.nextInt();
in.nextLine();
if(selection == SELCTION_ENTER_LETTER)
{
System.out.print(PROMPT_ENTER_LETTER);
char letter = in.next().charAt(0);
int letterCount = puzzle.guessLetter(letter);
if(letterCount > 0)
{
printMessageBox(String.format("YES! The letter %s was found %d time(s).", letter, letterCount));
}
else
{
printMessageBox(String.format("Sorry, the letter %s is not available in the puzzle.", letter));
}
}
else if(selection == SELCTION_SOLVE_PUZZLE)
{
System.out.print(PROMPT_SOLVE_PUZZLE);
String guess = in.nextLine();
if(puzzle.solvePuzzle(guess))
{
printMessageBox("Congratulations, you solved the puzzle!");
selection = 3;
}
else
{
printMessageBox(String.format("Sorry, '%s' is not the puzzle. Keep trying!", guess));
}
}
else if (selection != SELCTION_QUIT)
{
System.out.println("INVALID MENU OPTION");
}
}
System.out.println("\nGood Bye!");
in.close();
}
public static void printMessageBox(String message)
{
char [] border = new char[message.length() + 4];
Arrays.fill(border, '-');
StringBuilder result = new StringBuilder();
result.append(NEWLINE);
result.append(border).append(NEWLINE);
result.append("| ").append(message).append(" |").append(NEWLINE);
result.append(border).append(NEWLINE);
System.out.println(result);
}
}
拼圖是一個StringBuilder – user3417938
那個你永遠無法初始化! –
你需要聲明/初始化變量'難題' – csmckelvey