我不能为我的生活似乎接受这个文件的内容,我一直在第25行得到没有这样的元素异常,所有有助于欣赏。下面是文件link
的链接继承我的代码
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class practiceFinal {
public static void main(String[] args) {
String fileName = args[0];
int length = fileLength(fileName);
int[] array = new int[length];
String[] list = new String[length];
arrayPopulate(array, list, fileName);
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]);
}
}
public static int fileLength(String fileName) {
File file = new File(fileName);
Scanner fileScan = new Scanner(fileName);
int counter = 0;
while (fileScan.hasNext()) {
fileScan.next();
counter++;
}
return counter;
}
public static void arrayPopulate(int[] array, String[] list, String fileName) {
File file = new File(fileName);
Scanner fileScan = null;
try {
fileScan = new Scanner(file);
} catch (FileNotFoundException e) {
System.out.println("details: " + e.getMessage());
}
for (int i = 0; i < array.length; i++) {
array[i] = fileScan.nextInt();
list[i] = fileScan.next();
}
}
}
答案 0 :(得分:0)
而不是使用int length = fileLength(fileName);要查找长度,请使用int length = fileName.length();
答案 1 :(得分:0)
根据您的文件格式和当前代码,length
代表&#34;字数&#34;在文件中。在你的循环中,你需要将i
提高2而不是1,因为它消耗了两个&#34;单词&#34;每次迭代。这也意味着每个阵列的长度应该是它应该的两倍。使用length/2
实例化它们。
for (int i = 0; i < array.length; i += 2) {
array[i] = fileScan.nextInt();
list[i] = fileScan.next();
}
或者,您可以使length
表示文件中的行数。为此,请在计数循环中使用hasNextLine()
和nextLine()
。然后按原样保留所有其余代码。
while (fileScan.hasNextLine()) {
fileScan.nextLine();
counter++;
}
此外,请确保为Scanner
传递了适当的参数。 String
有效,但不适用于文件I / O.您需要先使用File
创建fileName
对象。
Scanner fileScan = new Scanner(new File(fileName));
答案 2 :(得分:0)
这里有一些问题。首先,您使用fileScan.next();
来尝试获取文件的长度。这将给你2倍的长度,因为你正在计算每个令牌fileScan.next()
抓取,这将是首先是数字然后是字母。
线条的长度为144,但是当你计算它时,它会返回288。
所以使用fileScan.nextLine();
,现在有些人已经提到了这一点但是你的程序仍然没有正常工作,因为你通过了Scanner fileScan = new Scanner(fileName); // mistake passed fileName instead of file
以下是我在fileLength()方法中所做的更改:
File file = new File(fileName);
Scanner fileScan = new Scanner(file); // mistake passed fileName instead of file, changed from Scanner fileScan = new Scanner(fileName)
while (fileScan.hasNextLine()) {
fileScan.nextLine(); // changed from fileScan.next()
counter++;
}
您的输出如下:
84c89C11w71h110B96d61H92d10B3p40c97G117X13....
打印结果时,请将打印语句更改为
System.out.print(array[i]);
System.out.print(" " + list[i]);
System.out.println();
现在输出如下:
84 c
89 C
11 w
71 h
....