我正在尝试能够读取包含int的文件的第一行,然后将该大小用于我的数组。之后,我需要能够使用文件中包含的内容填充和打印我的数组。运行后,我得到一个越界错误。
import java.io.*;
import java.util.Scanner;
import java.util.Random;
public class LabAssignment4 {
public static void main(String[] args) throws IOException {
File animalsFile = new File("animals.txt");
Scanner animalsScan = new Scanner(animalsFile);
File soundsFile = new File("sounds.txt");
Scanner soundsScan = new Scanner(soundsFile);
int animalsSize = animalSize (animalsScan);
String [] animalsArray = new String [animalsSize];
int soundsSize = soundSize (soundsScan);
String[] soundsArray = new String [soundsSize];
fillAnimalsAndSoundsArray(soundsScan,animalsScan,animalsArray,soundsArray);
printAnimalsAndSoundsArray(animalsArray,soundsArray);
} // end main
public static int animalSize(Scanner animalsScan){
int animals = animalsScan.nextInt();
return animals;
}
public static int soundSize(Scanner soundsScan){
int sounds = soundsScan.nextInt();
return sounds;
}
public static void fillAnimalsAndSoundsArray(Scanner soundsScan, Scanner animalsScan, String [] animalsArray, String [] soundsArray){
int animalsIndex=0;
int soundsIndex=0;
while(animalsScan.hasNext()){
animalsArray[animalsIndex]=animalsScan.nextLine();
animalsIndex++;
}
while(soundsScan.hasNext()){
soundsArray[soundsIndex]=soundsScan.nextLine();
soundsIndex++;
}
}
public static void printAnimalsAndSoundsArray(String[] animalsArray, String[] soundsArray){
for(int i =0;i<animalsArray.length;i++){
System.out.println(animalsArray[i]);
}
for(int i = 0;i<soundsArray.length;i++){
System.out.println(soundsArray[i]);
}
}
} // end class
答案 0 :(得分:0)
编辑:我看到您已使用hasNextInt()更改了代码,是否可以上传新代码以便我们查看您更改的位置?而且,打印null是什么意思? PointerNullException还是什么都没有?请提供错误:)
根据我的理解:您的文件形状如下:
Line 1 Integer: corresponding to the number of animals/sounds1 in the file.
//Let's call the above number **nbFeatures** from now on
Line 2 String: corresponding to a single animal1 / sound1
Line 3 String: corresponding to a single animal2 / sound2
...
如果不是,您可以添加几行文件吗?
现在,Out of Bound异常表示在到达数组中的索引时出现错误。 (通常,您尝试到达数组的索引i,但数组的大小小于i)
检查第1行中是否有nbFeatures 等于文件中的实际行数(减去第一行)。在理想情况下,文件只包含动物字符串或声音字符串,您可以使用此方法计算行数:
int count = 0;
//change animalScans to soundScans
while (animalScans.hasNext()) {
count++;
animalScans.nextLine();
}
System.out.println(count-1) // -1 to not count the first line.
如果(count-1)&gt; nbFeatures,这意味着你应该增加 数组的大小为count-1或更改方法 fillAnimalAndSoundArrays用于填充数组,直到它满了。
如果那不是问题,你可以上传异常错误吗?