可能重复:
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异常。如何将这些类型分配给这些数组?
答案 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;
}
}