在上一个项目中使用我的计算机类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
我在阅读文件时需要帮助创建数组
答案 0 :(得分:0)
您已经有一个Computer
类(您链接到的类)可以保存给定“计算机”的所有这些属性。
您知道文件中的每一行代表一台计算机。因此,每一行都可以用Computer
(您链接到的那个)表示。
您知道如何将这些行解析为具有split()
的字符串数组,并且该拆分数组中的每个元素都精确对应于“计算机”的某个属性。这意味着文件的每一行都可以生成String[]
,其中String[]
的每个元素代表计算机的一个属性(例如,制造商是compArray[0]
,模型是compArray[1]
等等。)。
您也知道您已拥有动态数组,例如ArrayList<Computer>
。
现在只需将所有这些放在一起:
Computer
并将拆分标记复制到相应的属性。Computer
添加到动态List<Computer>
。请务必妥善处理错误:如果您点击一个空白行或没有预期数量的令牌的行会怎样?
您拥有所需的所有工具,因此请考虑如何将它们组合在一起以解决手头的问题。
答案 1 :(得分:0)
你得到的错误是因为你的for循环每次迭代50次,这意味着j将在循环结束时递增到50。现在问题出在你使用temp [j]的代码行中。由于temp将保存split()方法返回的字符串数组,因为您的computers.txt文件和正则表达式分隔符是&#34;:&#34;冒号,temp将保存一个大小为8的数组,当j变量增加到8时,你会得到ArrayIndexOutOfBoundsException:8因为temp不够大,换句话说temp没有索引8或更高
compArray[i][j] = temp[j]; // here is the problem.
试试这个
package project5;
import java.util.Scanner;
import java.io.*;
public class Project5 {
public static void main(String[] args){
String[][] compArray = new String[50][];// instead of 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 ( file.hasNext() ){
line = file.nextLine() ;
temp = line.split(":");
compArray[i] = temp ; // Since you have an array of arrays you can put the return of your split method directly in your array
i++;
}
System.out.println(compArray[0][0]) ;
System.out.println(compArray[0][7]) ;
}
}