我是Java语言的新手,有人可以帮我解决这个问题。
问题是这样的:
目标:回顾读取和写入文件对象的概念 汽车信息在文本文件中提供,如下所示。 文件名:honda.txt CRV-3 CV6787272 150000.00 20.0
MRV-1 MV9890202 180000.00 20.0
Civic CC9939390 82000.00 10.0
CRV-3 CV8393939 149000.00 20.0
步骤1创建一个名为“Car”的类,其中包含以下字段。这些字段对应于文本文件中除最后一列之外的列。
一个。车辆名称:字符串
湾引擎号:字符串
℃。车辆价格:双倍
d。利润:双倍v。
即总价:双倍(总价格=(车辆价格)+(车辆价格*利润/ 100)
步骤2使用方法更新Car类以执行以下操作
一个。阅读文本文件的内容(honda.txt)
我。对于文件中的每一行,使用计算的总价创建Car类的实例。
II。将创建的每个实例写入另一个文件“honda_showroom.txt”。
湾显示“honda_showroom.txt”的内容
我。方法ex:showCar(String eNumber),将Engine Number作为参数。并显示特定车辆的所有信息,包括总价。 步骤3创建一个Main类来测试上面的内容。
到目前为止我编写的代码:
汽车类代码(以BlueJ编写):
import java.io.Serializable;
public class Car {
private String vehicleName;
private String engineNumber;
private double vehiclePrice;
private double Profit;
private double totalPrice;
totalPrice = (vehiclePrice) + ((vehiclePrice * Profit) / 100);
public double getProfit() {
return Profit;
}
public void setProfit(double Profit) {
this.Profit = Profit;
}
public String getEngineNumber() {
return engineNumber;
}
public void setEngineNumber(String engineNumber) {
this.engineNumber = engineNumber;
}
public double getTotalPrice() {
return totalPrice;
}
public void setTotalPrice(double totalPrice) {
this.totalPrice = totalPrice;
}
public String getVehicleName() {
return vehicleName;
}
public void setVehicleName(String vehicleName) {
this.vehicleName = vehicleName;
}
public double getVehiclePrice() {
return vehiclePrice;
}
public void setVehiclePrice(double vehiclePrice) {
this.vehiclePrice = vehiclePrice;
}
}
输出或显示类:
import java.io.Serializable;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
import java.util.ArrayList;
import java.io.FileReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
public class Display {
private String fileName;
public Display(String fName) {
// this.fileName = "honda_showroom";
fileName = fName;
// this.fileName = fileName;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public void showCar(String eNumber) throws FileNotFoundException, IOException, ClassNotFoundException {
FileInputStream fis = new FileInputStream(new File(this.fileName));
ObjectInputStream ois = new ObjectInputStream(fis);
ArrayList<Car> cList = (ArrayList<Car>) ois.readObject();
while (ois.readObject() != null) {
cList = new ArrayList<Car>();
int searchListLength = cList.size();
for (int i = 0; i < searchListLength; i++) {
if (cList.get(i).equals(eNumber)) {
cList.toString();
}
}
}
}
}
提前致谢!请记住,我是初学者还从互联网上收集了一些代码。
答案 0 :(得分:-1)
首先,我希望看到一些质量较差的代码。
我认为第一个麻烦是:
private double totalPrice;
totalPrice = (vehiclePrice) + ((vehiclePrice * Profit) / 100);
赋值语句无法编译。在class { ... }
以下的那个级别,您只能声明字段,方法,构造函数(和初始值设定项)。
您可以将它放在构造函数或方法中:
public void updateTotalPrice() {
totalPrice = vehiclePrice + vehiclePrice * Profit / 100;
}
现在totalPrice完全取决于公式变量的实际当前值。所以也许它应该是一种方法,而不是总是计算它的价值。
第二个问题是文件I / O.当然应该使用已经学过的手段。所以这对我来说有点困难,可能你应该自己研究一下。
我会使用Reader阅读 text :
Path path = Paths.get(fileName);
BufferedReader in = Files.new BufferedReader(path, StandardCharsets.UTF_8);
...
in.close();
或者
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
类似Files可以写文字。
正如你所做的那样写作二进制数据,不能轻易检查 - 太多魔术。
评论后
有些课程使用扫描仪而不是简单的(BufferedReader);可以读取键入的值。 BufferedReader将如下所示:
for (;;) {
String line = in.readLine(); // null when at end; no newline chars
if (line == null) {
break;
}
String[] fields = line.split(" ", 4);
if (fields.length == 4) {
Car car = new Car();
car.setVehicleName(fields[0]);
...
car.setProfit(Double.parseDouble(fields[3]);
cList.add(car);
}
}