从文件中读取一个整数,然后在数组中填充并打印该文件

时间:2018-02-22 02:51:18

标签: java

我正在尝试能够读取包含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

1 个答案:

答案 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用于填充数组,直到它满了。

如果那不是问题,你可以上传异常错误吗?