英文:
Why is my program throwing by a null exception when reading this file input?
问题
以下是翻译好的代码部分:
public static void main(String[] args) throws IOException {
int[] boardGame = null;
Scanner scnr = new Scanner(System.in);
String fileName;
String LogFile;
try {
System.out.println("输入游戏板数据输入文件名:");
fileName = scnr.next();
boardGame = createGameboard(fileName); // 这里出现问题,抛出异常并输出单词 "null"
System.out.println();
LogFile = writeLogFile(fileName, boardGame);
if(LogFile.equals("null")) {
throw new Exception("程序将继续没有日志文件。");
}
else {
System.out.println("日志文件 " + LogFile + " 创建成功");
}
System.out.println();
} catch (IOException excpt) {
System.out.println(excpt.getMessage());
System.out.println("没有游戏板无法进行游戏,因此程序退出");
} catch (Exception excpt) { // 在这里捕获并显示单词 "null"
System.out.println(excpt.getMessage());
}
}
public static int[] createGameboard(String nameFile) throws IOException {
int[] gameBoard = null;
File gameFile = new File(nameFile);
Scanner inFS = new Scanner(gameFile);
int boardSize;
int numLadders = 0;
int numChutes = 0;
int index;
int value;
boardSize = inFS.nextInt();
boardSize = boardSize;
gameBoard = new int[boardSize];
while(inFS.hasNextInt()) {
index = inFS.nextInt();
value = inFS.nextInt();
gameBoard[index] = value;
if (value > 0) {
numLadders++;
}
else if(value < 0) {
numChutes++;
}
else {
}
}
System.out.println("游戏板设置为 " + (boardSize - 1) + " 个方格");
System.out.println(" " + numChutes + " 个方格有滑道");
System.out.println(" " + numLadders + " 个方格有梯子");
return gameBoard;
}
希望这可以帮助你解决问题。如果你需要更多的帮助,请随时提问。
英文:
Writing a program to play the game Chutes and Ladders by inputting different ".txt" files and reading their data and outputting it to virtual game board. There is a lot more to the program, however, this part is hanging me up. Whenever the program tried to read the .txt file it throws an Exception and outputs the word "null".
public static void main(String[] args) throws IOException {
int[] boardGame = null;
Scanner scnr = new Scanner(System.in);
String fileName;
String LogFile;
try {
System.out.println("Enter gameboard data input filename:");
fileName = scnr.next();
boardGame = createGameboard(fileName); //hangup appears to be here and throws Exception
System.out.println();
LogFile = writeLogFile(fileName, boardGame);
if(LogFile == "null") {
throw new Exception("Program will continue without a log file.");
}
else {
System.out.println("Log file " + LogFile + " successfully created");
}
System.out.println();
} catch (IOException excpt) {
System.out.println(excpt.getMessage());
System.out.println("Cannot play without gameboard, so program exiting");
} catch (Exception excpt) { //which is caught here and displays the word null
System.out.println(excpt.getMessage());
}
}
public static int[] createGameboard(String nameFile) throws IOException {
int[] gameBoard = null;
File gameFile = new File(nameFile);
Scanner inFS = new Scanner(gameFile);
int boardSize;
int numLadders = 0;
int numChutes = 0;
int index;
int value;
boardSize = inFS.nextInt();
boardSize = boardSize;
gameBoard = new int[boardSize];
while(inFS.hasNextInt()) {
index = inFS.nextInt();
value = inFS.nextInt();
gameBoard[index] = value;
if (value > 0) {
numLadders++;
}
else if(value < 0) {
numChutes++;
}
else {
}
}
System.out.println("Gameboard setup with " + (boardSize - 1) + " squares");
System.out.println(" " + numChutes + " squares have a chute");
System.out.println(" " + numLadders + " squares have a ladder");
return gameBoard;
}
}
Sample ".txt" file being used:
31 (boardSize)
3 19 (square number : move up or down 'x' spaces)
5 3
11 15
20 9
17 -13
19 -12
21 -12
27 -26
答案1
得分: 0
我认为问题出在这里
boardSize = inFS.nextInt();
检查 inFS(文件)是否有下一个输入作为整数。
用以下方式更正
if(inFS.hasNextInt())
boardSize = inFS.nextInt();
英文:
I think the problem lies here
boardSize = inFS.nextInt();
Check if the inFS (File) has next input as int or not.
Correct it with
if(inFS.hasNextInt())
boardSize = inFS.nextInt();
答案2
得分: 0
抱歉,但我无法复制您提供的代码中的问题。
我复制了您的代码,添加了导入、类定义和虚拟的 writeLogFile
方法,然后复制了您的示例文本文件并猜测了您如何运行它。请看下面的输出。
在发布问题之前自己进行这个实验将非常有帮助,因为这样您可以检查您的问题是否真正捕获了问题,并具有可重现的工作步骤:
$ cat foo.txt
31
3 19
5 3
11 15
20 9
17 -13
19 -12
21 -12
27 -26
$ javac Foo.java && java Foo
Enter gameboard data input filename:
foo.txt
Gameboard setup with 30 squares
4 squares have a chute
4 squares have a ladder
Log file dummy.txt successfully created
$
以下是 Foo.java
的代码:
import java.util.*;
import java.io.*;
class Foo {
public static void main(String[] args) throws IOException {
int[] boardGame = null;
Scanner scnr = new Scanner(System.in);
String fileName;
String LogFile;
try {
System.out.println("Enter gameboard data input filename:");
fileName = scnr.next();
boardGame = createGameboard(fileName); //hangup appears to be here and throws Exception
System.out.println();
LogFile = writeLogFile(fileName, boardGame);
if(LogFile == "null") {
throw new Exception("Program will continue without a log file.");
}
else {
System.out.println("Log file " + LogFile + " successfully created");
}
System.out.println();
} catch (IOException excpt) {
System.out.println(excpt.getMessage());
System.out.println("Cannot play without gameboard, so program exiting");
} catch (Exception excpt) { //which is caught here and displays the word null
System.out.println(excpt.getMessage());
}
}
static String writeLogFile(String x, int[] y) {
return "dummy.txt";
}
public static int[] createGameboard(String nameFile) throws IOException {
int[] gameBoard = null;
File gameFile = new File(nameFile);
Scanner inFS = new Scanner(gameFile);
int boardSize;
int numLadders = 0;
int numChutes = 0;
int index;
int value;
boardSize = inFS.nextInt();
boardSize = boardSize;
gameBoard = new int[boardSize];
while(inFS.hasNextInt()) {
index = inFS.nextInt();
value = inFS.nextInt();
gameBoard[index] = value;
if (value > 0) {
numLadders++;
}
else if(value < 0) {
numChutes++;
}
else {
}
}
System.out.println("Gameboard setup with " + (boardSize - 1) + " squares");
System.out.println(" " + numChutes + " squares have a chute");
System.out.println(" " + numLadders + " squares have a ladder");
return gameBoard;
}
}
英文:
Sorry about the non-answer, but I am unable to reproduce your problem with the code you have provided.
I copied your code, added imports, a class definition, and a dummy writeLogFile
method, then copied your sample text file and guessed at how you ran it. See the output below.
It would be really helpful if you did this experiment yourself before posting, because that way you can check that your question actually captures the problem, and has working steps to reproduce:
$ cat foo.txt
31
3 19
5 3
11 15
20 9
17 -13
19 -12
21 -12
27 -26
$ javac Foo.java && java Foo
Enter gameboard data input filename:
foo.txt
Gameboard setup with 30 squares
4 squares have a chute
4 squares have a ladder
Log file dummy.txt successfully created
$
Here's Foo.java
:
import java.util.*;
import java.io.*;
class Foo {
public static void main(String[] args) throws IOException {
int[] boardGame = null;
Scanner scnr = new Scanner(System.in);
String fileName;
String LogFile;
try {
System.out.println("Enter gameboard data input filename:");
fileName = scnr.next();
boardGame = createGameboard(fileName); //hangup appears to be here and throws Exception
System.out.println();
LogFile = writeLogFile(fileName, boardGame);
if(LogFile == "null") {
throw new Exception("Program will continue without a log file.");
}
else {
System.out.println("Log file " + LogFile + " successfully created");
}
System.out.println();
} catch (IOException excpt) {
System.out.println(excpt.getMessage());
System.out.println("Cannot play without gameboard, so program exiting");
} catch (Exception excpt) { //which is caught here and displays the word null
System.out.println(excpt.getMessage());
}
}
static String writeLogFile(String x, int[] y) {
return "dummy.txt";
}
public static int[] createGameboard(String nameFile) throws IOException {
int[] gameBoard = null;
File gameFile = new File(nameFile);
Scanner inFS = new Scanner(gameFile);
int boardSize;
int numLadders = 0;
int numChutes = 0;
int index;
int value;
boardSize = inFS.nextInt();
boardSize = boardSize;
gameBoard = new int[boardSize];
while(inFS.hasNextInt()) {
index = inFS.nextInt();
value = inFS.nextInt();
gameBoard[index] = value;
if (value > 0) {
numLadders++;
}
else if(value < 0) {
numChutes++;
}
else {
}
}
System.out.println("Gameboard setup with " + (boardSize - 1) + " squares");
System.out.println(" " + numChutes + " squares have a chute");
System.out.println(" " + numLadders + " squares have a ladder");
return gameBoard;
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论