我有一个格式如下的文本文件:
2
d e
2
1 0 e
0 1 d
我想要一个名为size的变量,它等于第一个数字4。我还需要一个变量num来容纳第三行(3)。我想将第二行d e读入数组。我还想将最后两行读为两个数组-一个用于字符,另一种用于整数。我将在此处列出变量,以便于阅读:
size = 2 ---> first line
char[] chars = {d, e} ---> second line
num = 2 ---> third line
int[] pos = {1, 0, 0, 1} ---> Lines 4, 5
char[] posLetters = {e, d} ---> Lines 4, 5
在读取文件中的文本之前,我不太确定如何声明每个数组的大小。这很棘手,因为另一个文本文件可以读取:
3
a b c
4
0 3 b
2 0 c
1 2 a
0 2 b
第二个文件中的变量为:
size = 3 ---> first line
char[] chars = {a, b, c} ---> second line
num = 4 ---> third line
int[] pos = {0, 3, 2, 0, 1, 2, 0, 2} ---> Lines 4, 5, 6, 7
char[] posLetters = {b, c, a, b} ---> Lines 4, 5, 6, 7
这是我代码的第四或第五草稿。我碰到了墙。我知道如何逐行打印文件,但我不知道如何逐个变量地打印文件。
try {
File configFile = new File(config + "config.txt");
Scanner configScanner = new Scanner(configFile);
int size = configScanner.nextInt();
int num = configScanner.nextInt();
/*
int[][] board = new int[size][size];
for(int i = 0; i < size-1; i ++) {
for(int j = 0; j < size-1; j++) {
board[i][j] =
configScanner.nextInt();
}
}
*/
} catch (FileNotFoundException e) {
// handle the exception here
System.err.println(e);
e.printStackTrace();
} // try
我收到此错误:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at LatinSqauresGame.printWelcome(LatinSqauresGame.java:59)
at LatinSqauresGame.<init>(LatinSqauresGame.java:13)
at LatinSquaresDriver.main(LatinSquaresDriver.java:6)
我想在开头列出结果:
size = 2 ---> first line
char[] chars = {d, e} ---> second line
num = 2 ---> third line
int[] pos = {1, 0, 0, 1} ---> Lines 4, 5
char[] posLetters = {e, d} ---> Lines 4, 5
编辑:这是我现在拥有的代码:
int size = variableScan.nextInt();
char[] chars = new char[size];
for (int i = 0; i < size; i++) {
chars[i] = variableScan.next().charAt(0);
}
// Read pos and posLetters arrays
int num = variableScan.nextInt();
// code here to allocate and read pos and posLetters
System.out.println(size);
for (int i = 0; i < size; i++)
System.out.println(chars[i]);
System.out.println(num);
int iter = 0;
while(variableScan.hasNextLine()) {
int[] pos = new int[num*2];
for(int i = 0; i < 2; i++) {
pos[i + (2*iter)] = variableScan.nextInt();
}
char[] posLetters = new char[num];
for (int i = 0; i < 1; i++) {
posLetters[i + iter] = variableScan.next().charAt(0);
}
iter++;
}
与此文本文件配对:
2
a b
2
0 0 a
1 0 b
我得到了输出:
2
a
b
2
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at LatinSqauresGame.printWelcome(LatinSqauresGame.java:77)
at LatinSqauresGame.<init>(LatinSqauresGame.java:13)
at LatinSquaresDriver.main(LatinSquaresDriver.java:6)
答案 0 :(得分:1)
您首先调用nextInt()
两次,但是您的文件仅以一个数字开头,因此当然会在第二次nextInt()
调用中失败。
您的代码应如下所示:
// Read chars array
int size = configScanner.nextInt();
char[] chars = new char[size];
for (int i = 0; i < size; i++)
chars[i] = configScanner.next().charAt(0);
// Read pos and posLetters arrays
int num = configScanner.nextInt();
// code here to allocate and read pos and posLetters