【问题标题】:Read file into multidimensional arraylist with different datatypes?将文件读入具有不同数据类型的多维数组列表?
【发布时间】:2016-07-22 13:29:36
【问题描述】:

我正在编写我的第一个 android 应用程序,所以我是一个新手,对将数据从文件获取到数组的最佳方法感到困惑。我正在尝试从资源原始 txt 文件中获取数据并将其存储在数组或 ArrayList 中,以便我可以执行 excel 样式的 vlookup。数据文件 (data_file.txt) 的大小为 28,2,第一列有一个 int,第二列有一个浮点数,通过这样的空格分隔:

  • 500 -1.3
  • 1000 -1.6
  • 10000 -1.7

我希望能够查找 1000 的值并得到 -1.6。 首先,我应该使用多维对象数组还是ArrayList,我使用哪一个重要吗?我需要保持第二列的数据类型为 float,如果可能的话,我想保持第一列的数据类型为 int。

我正在寻找有关代码的提示和/或我需要研究的方法。

干杯,

空气修复


4 月 3 日更新

我很确定地图不是我想要的。我一直在研究下面的代码。除了Scanner scan = new Scanner(new FileReader(file)); 之外,它似乎可以工作,我在文件变量上得到一个“无法解析构造函数FileReader(int)。显然它把我的文件视为一个 int,而实际上它只是一个普通的 txt 文件,如示例中所示. 仍在寻求帮助完成。谢谢:)

public void fuelIndex (){


    Object file = (getResources().getIdentifier("fuel_index",
                "raw", getPackageName()));
    Scanner scan = new Scanner(new FileReader(file));


    Object[][] fuelIndexData = new String[28][2];


    int i = 0;
    while(scan.hasNextLine()){
        fuelIndexData[i] = scan.nextLine().split("\\s+");
        i++;
    }
    //loops through the file and splits on any space

    for (int row = 0; row < fuelIndexData.length; row++) {
        for (int col = 0; col < fuelIndexData[0].length; col++) {
            if(fuelIndexData[row][col] != null){
                System.out.print(fuelIndexData[row][col] + " " );
            }
        }
        if(fuelIndexData[row][0] != null){
            System.out.print("\n");
        }
    }

}

【问题讨论】:

  • 如果你只有一个键和一个值,也许你可以使用 HashMap。

标签: java android arrays arraylist multidimensional-array


【解决方案1】:

如果整数是唯一的并用于标识浮点值,则应使用HashMap,如果您按列表中的位置进行索引并且整数值允许重复,则可以使用ArrayList有一些对象ContainerObject 存储这两个值。

HashMap

Map<Integer, Float> myMap = new HashMap<Integer, Float>();
myMap.put(500, -1.3f);
myMap.put(1000, -1.6f);
myMap.put(10000, -1.7f);

数组列表

List<ContainerObject> myList = new ArrayList<ContainerObject>();
myList.add(new ContainerObject(500, -1.3f));
myList.add(new ContainerObject(1000, -1.6f));
myList.add(new ContainerObject(1000, -1.7f));

【讨论】:

    【解决方案2】:

    这似乎是Map 而不是List 的用例。注意:在 Java 中有两种浮点数据类型。您提到您想将值存储为浮点数,但我假设您只是意味着数据将使用浮点表示进行存储。所以,我假设我们在这里使用Doubles。 Map 可用于将 Integer 键映射到 Double 值,就像使用 map.get(1000) 获取值 1.6 一样。

    这里有一些代码来演示:

        Map<Integer,Double> map = new HashMap<>();
        map.put(1000, 1.6);
        map.put(500,  1.3);
        map.put(10000, 1.7);
    
        System.out.println(map.get(10000));
        System.out.println(map.get(99));
    

    这会产生以下输出:

    1.7
    null
    

    1.7 在第一次调用中返回,因为它是 10000 键的值。 null 在第二次调用中返回,因为 99 不在 keySet 中。 JavaDoc for the Map interface 有更多详细信息。

    【讨论】:

    • 我将不得不考虑这样的映射是否可行。我正在从编辑文本字段中获取用户输入。此用户输入可以是整数列的数据集范围内的任何整数,不一定是列出的“索引”之一。对于介于 1 和 500、501 和 1000 等之间的整数值,所有浮点值都是相同的。我打算使用循环来检查 edittext 输入值落入哪个范围,然后将相应的浮点分配给变量。从我的其他编程经验(非基于对象)看来,数组将是处理它的方法。
    猜你喜欢
    • 2015-07-10
    • 2014-11-15
    • 1970-01-01
    • 2014-02-01
    • 2017-03-04
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多