【问题标题】:assigning variables in a file to an array [duplicate]将文件中的变量分配给数组[重复]
【发布时间】:2011-10-06 02:17:23
【问题描述】:

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

【问题讨论】:

  • 您的文件和您的代码似乎根本不匹配。您的代码表明您将有一个名称,然后是一个 int,然后是一个字母,然后是一个 double,然后重复直到全部消失。您的文件显示了所有组合在一起的名称,所有整数,所有字符,所有双精度数等......我认为你最好解决这个问题。另外,您是否提前知道每个有多少人在场?
  • 对于家庭作业问题,你应该这样标记它们。
  • 好的,所以每种类型都有 28 个项目。您是否使用 28 作为为每个数组分配的数组项数?考虑这样做,然后按照数据文件中显示的类型顺序一次填充每个数组。
  • OP 为同一个问题启动了第二个线程 - Printing a list in java,这是答案 - stackoverflow.com/questions/7669571/printing-a-list-in-java/…

标签: java arrays file


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您正在尝试向数组中添加比数组空间更多的项目,请尝试使用像 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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-12
      • 2019-07-21
      • 2012-06-11
      • 2014-06-27
      • 2019-06-29
      相关资源
      最近更新 更多