当我运行程序时,它永远不会停止,并且不知道如何制作(对于每一行)不同的v号(给我语法错误),谢谢你的帮助。 文件格式每行都有字符串int string string
public static void main(String[] args) throws FileNotFoundException, IOException {
String filelocation = "location";
filelocation = JOptionPane.showInputDialog("Enter file address");
BufferedReader inFile = new BufferedReader(new FileReader(filelocation)); //using BufferedReader to get readLine function
ArrayList<Vehicle> VehicleList = new ArrayList<Vehicle>();
int counter = 1;
String dataRow = null;
dataRow= inFile.readLine();
while ( dataRow != null){
try{
String[] temp = dataRow.trim().split("\\s+");
Vehicle v(counter) = new Vehicle (temp[0], Integer.parseInt(temp[1]), temp[2], temp[3], temp[4]);
VehicleList.add(v1);
dataRow= inFile.readLine();
}
catch(Exception e){}
}
inFile.close();
System.out.println(VehicleList);
System.out.println(v1);
}
答案 0 :(得分:1)
如前所述,您最有可能在while循环中获得异常。
但问题的主要问题是dataRow = inFile.readLine()
在while循环中。
while ( dataRow != null){
try{
String[] temp = dataRow.trim().split("\\s+");
Vehicle v(counter) = new Vehicle (temp[0], Integer.parseInt(temp[1]), temp[2], temp[3], temp[4]);
VehicleList.add(v1);
dataRow= inFile.readLine(); // <---shouldn't be in while loop
}
catch(Exception e){}
}
inFile.close();
System.out.println(VehicleList);
System.out.println(v1);
}
所以会发生什么,抛出异常,然后跳转到catch块而不改变dataRow
的值!
因此,每次执行while循环时,它实际上是将dataRow
与您设置的第一个值进行比较。
您可以通过更改代码来解决此问题,如下例所示:
while((dataRow = inFile.readLine()) != null){
try {
//some stuff
}
catch(Exception e){
//some other stuff
}
}
确保删除dataRow = inFile.readLine()
因此,它会或多或少地表现出你想要它的表现。如果您想忽略抛出的异常,这将继续处理该文件直到结束。抛出异常的行将被跳过。
答案 1 :(得分:0)
您无法指定Dynamic variable names
。 Java是一种强类型语言。
您可以做的是将其保存在列表中,并使用索引来获取和设置它。
您的代码应如下所示:
String[] temp = dataRow.trim().split("\\s+");
Vehicle v = new Vehicle (temp[0], Integer.parseInt(temp[1]), temp[2], temp[3], temp[4]);
VehicleList.add(v);
System.out.println(v);
dataRow= inFile.readLine();
获取使用
VehicleList.get(index)
设置使用
VehicleList.set(index, VEHICLE)
答案 2 :(得分:0)
循环未终止的最可能原因是读取循环中的异常(您使用异常并尝试继续)。根据您的示例,我认为您对split与Vehicle构造函数的输入不匹配。另外,正如您所知,您不能拥有动态变量名称,例如Vehicle v(counter)= new Vehicle(...给出语法异常。
查看此版本是否有助于向您显示问题所在。
public static void main(String[] args) throws FileNotFoundException, IOException {
String filelocation = "location";
filelocation = JOptionPane.showInputDialog("Enter file address");
BufferedReader inFile = new BufferedReader(new FileReader(filelocation)); //using BufferedReader to get readLine function
ArrayList<Vehicle> VehicleList = new ArrayList<Vehicle>();
int counter = 0;
String dataRow = null;
dataRow= inFile.readLine();
try{
while ( dataRow != null){
String[] temp = dataRow.trim().split("\\s+");
if (temp.length != 5)
throw new Exception("split returned "+temp.length);
Vehicle v = new Vehicle (temp[0], Integer.parseInt(temp[1]), temp[2], temp[3], temp[4]);
VehicleList.add(v);
System.out.println(v);
dataRow= inFile.readLine();
}
}
catch(Exception e){
e.printStackTrace();
}
finally {
inFile.close();
}
System.out.println(VehicleList);
}