将文件中的变量分配给数组

时间:2011-10-06 02:17:23

标签: java arrays file

  

可能重复:
  Printing a list in java

我在文件中有不同的变量需要分配给不同的变量数组。以下是文件中的内容:

Lee Keith Austin Kacie Jason Sherri     Jordan     Corey Reginald Brian Taray 
Christopher Randy Henry Jeremy Robert    Joshua   Robert   Eileen 
Cassandra Albert Russell   Ethan   Cameron Tyler Alex Kentrell  rederic
10 20 100 80 25 35 15 10 45 55 200 300 110 120 111 7 27 97 17 37 
21 91 81 71 16 23 33 45
A  b  c w e r t q I u y b G J K S A p o m b v x K F s q w
11.5 29.9 100  200 115.1 33.3 44.4 99.9 100.75 12.2 13.1 20.3 55.5 77.7
12.1 7.1  8.2   9.9   100.1  22.2  66.6 9.9  1.25     3.75   19.9  3.321  45.54 88.8

这是我的代码:

import java.util.*;
public class Prog5Methods{
public Prog5Methods(){
}
    public void ReadFromFile(Scanner input, String [] names, int [] numbers, char [] letters, double [] num2){
        System.out.println("\nReading from a file...\n");
        System.out.println("\nDONE\n");
        int r = 0;
            while(input.hasNext()){
                names[r] = input.next();
                numbers[r] = input.nextInt();
                letters[r] = input.next().charAt(0);
                num2[r] = input.nextDouble();
                r++;
        }
} // end of readFromFile

我每次都会收到IndexOutOfBounds异常。如何将这些类型分配给这些数组?

2 个答案:

答案 0 :(得分:0)

您需要确保传递给函数的数组具有正确的长度设置。如果你得到IndexOutOfBounds异常,你可能没有根据文件中的whats初始化数组。

另一种选择是使用没有大小限制的List,然后将列表转换为数组。请参阅this以获得简单的方法。

答案 1 :(得分:0)

您尝试向阵列添加的项目数量多于数组中的空间,请尝试使用java.util.ArrayList之类的列表。

此外,文件显示了一个名单列表,然后是一个数字列表,然后是一个字母列表,然后是一个小数列表,但在你的代码中,你读了一个名字,然后是一个数字,然后是一个字母,然后一双。

尝试类似

的内容
import java.util.ArrayList;
import java.io.File;

public class Prog5Methods{
    public void foo(String filename){
        ArrayList<String> names=new ArrayList<String>();
        ArrayList<Integer> ints=new ArrayList<Integer>();
        ArrayList<Character> chars=new ArrayList<Character>();
        ArrayList<Double> dubs=new ArrayList<Double>();
        ReadFromFile(new Scanner(new File(filename)),names,ints,chars,dubs);
    }
    public void ReadFromFile(Scanner input, ArrayList<String> names, ArrayList<Integer> numbers, ArrayList<Character> letters, ArrayList<Double> num2){
        System.out.println("\nReading from a file...\n");
        while(input.hasNext()&&!input.hasNextInt()){
            names.add(input.next());
        }
        while(input.hasNextInt()){
            numbers.add(input.nextInt());
        }
        while(input.hasNext()&&!input.hasNextDouble()){
            letters.add(input.next().charAt(0));
        }
        while(input.hasNextDouble()){
            num2.add(input.nextDouble());
        }
        System.out.println("\nDONE\n");
    }
    public String[] convertToArray(ArrayList<String> arr){
        String[] ans=new String[arr.size()];
        arr.toArray(ans);
        return ans;
    }
}