我应该在上一个项目中使用我的计算机类my computer class,用Java编写一个程序,该程序读取计算机数据名称computers.txt的文件,并创建计算机对象数组,到目前为止,我已经有了这个程序。

package project5;
import java.util.Scanner;
import java.io.*;


public class Project5 {


public static void main(String[] args){

    String[][] compArray = new String[50][50];
    String line = ":";
    String [] temp;

    Scanner file =null;
    try
    {
     file = new Scanner(new File("computers.txt"));
    }
    catch(FileNotFoundException e)
    {
        System.out.println("Could not open file " + "computers.txt");
        System.exit(200);
    }

    int i = 0;
    while ((line = file.nextLine())!= null){
        temp = line.split(":");
        for (int j = 0; j<compArray[i].length; j++) {
            compArray[i][j] = temp[j];
        }
        i++;
    }

    System.out.println(compArray[0][0]);
    }

}


现在我得到一个错误。我做了

System.out.println(compArray[0][0]);


看看它是否在工作,但是我得到了那个错误

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
at project5.Project5.main(Project5.java:44)


的computers.txt文件看起来像这样

Dell Computers Inc.:Inspiron 15 Touch:6:500:Intel Core i5:CD/DVD+-RW:Windows 8.1:649.99
Dell Computers Inc.:Inspiron 17:4:500:Intel Core i3:CD/DVD+-RW:Windows 7:549.99
Dell Computers Inc.:Alienware 18:16:1000:Intel Core i7:Dual Layer Blu-ray:Windows    7:2999.99
Acer Computers Inc.:Aspire AT3-600:6:2000:Intel Core i5:BlueRay:Windows 8:599.99


我在读取文件时需要有关创建数组的帮助

最佳答案

您已经有一个Computer类(您链接到的类),该类可以容纳给定“计算机”的所有这些属性。

您知道文件中的每一行代表一台单独的计算机。因此,每一行都可以用Computer(链接到的行)表示。

您知道如何使用split()将这些行解析为字符串数组,并且该拆分数组中的每个元素都精确对应于“计算机”的属性之一。这意味着文件的每一行都可以产生一个String[],其中该String[]的每个元素代表计算机的属性之一(例如,制造商是compArray[0],型号是compArray[1],等等)。

您还知道您已经可以使用动态数组,例如ArrayList<Computer>

现在,只需将所有这些放在一起即可:


从文件中读取每一行。对于每一行:
像已经做的那样拆分它。
构造一个新的Computer并将拆分标记复制到适当的属性。
将该Computer添加到动态List<Computer>中。


确保妥善处理错误:如果您击中空白行或其中没有预期令牌数的行,会发生什么?

您拥有所需的所有工具,因此请考虑如何将它们组合在一起以解决当前的问题。

关于java - 当扫描仪读取文本文件时,创建对象数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22416585/

10-09 05:22