Java新手,希望有人帮我解决这个问题

时间:2015-11-17 17:36:41

标签: java class import

我是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();
            }

         }
     }
 }
 }

提前致谢!请记住,我是初学者还从互联网上收集了一些代码。

1 个答案:

答案 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);
    }
}