【问题标题】:New to Java and would like someone to help me with thisJava 新手,希望有人能帮我解决这个问题
【发布时间】:2016-02-19 05:01:45
【问题描述】:

我是 Java 语言的新手,谁能帮我解答这个问题。

问题是这样的:

目标:复习将对象读取和写入文件的概念 汽车信息以文本文件的形式提供,如下所示。 文件名:honda.txt CRV-3 CV6787272 150000.00 20.0

MRV-1 MV9890202 180000.00 20.0

思域CC9939390 82000.00 10.0

CRV-3 CV8393939 149000.00 20.0

步骤 1 创建一个名为“Car”的类,该类具有以下字段。这些字段对应于文本文件中除最后一个之外的列。

一个。车辆名称:字符串

b.引擎号:字符串

c。车辆价格:双倍

d。利润:双倍。

e。总价:双倍(总价=(车价)+(车价*利润/100)

步骤 2 使用方法更新 Car 类以执行以下操作

一个。读取文本文件(honda.txt)的内容

我。对于文件中的每一行,使用计算的总价创建一个 Car 类的实例。

二。将创建的每个实例写入另一个文件“honda_showroom.txt”。

b.显示“honda_showroom.txt”的内容

我。一个方法 ex:showCar(String eNumber),将引擎编号作为参数。并显示特定汽车的所有信息,包括总价。 第 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();
            }

         }
     }
 }
 }

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

【问题讨论】:

标签: java class import


【解决方案1】:

首先,我预计会看到一些质量较差的代码。

我认为第一个麻烦是:

private double totalPrice;
totalPrice = (vehiclePrice) + ((vehiclePrice * Profit) / 100);

赋值语句无法编译。在class { ... } 正下方的那个级别,您只能声明字段、方法、构造函数(和初始化程序)。

你可以把它放在构造函数或方法中:

public void updateTotalPrice() {
    totalPrice = vehiclePrice + vehiclePrice * Profit / 100;
}

现在 totalPrice 完全取决于公式变量的实际当前值。所以也许它应该是一个方法,总是计算它的值。

第二个问题是文件 I/O。当然应该使用已经学过的方法。所以对我来说有点难,可能你应该自己调查一下。

我会使用阅读器阅读文本

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可以写文字。

正如您所做的那样,以二进制数据的形式写入,检查起来并不容易 - 太神奇了。


评论后

有些课程使用 Scanner 而不是简单的 (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);
    }
}

【讨论】:

  • 你能解释一下在哪里包含阅读器吗?
  • 关于读取汽车的文本文件。如果您的意思是它将如何工作;我添加了可用的工具:BufferedReader.readLine, String.split, Double.parseDouble。如果您了解 Scanner,请使用它。
猜你喜欢
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
  • 1970-01-01
相关资源
最近更新 更多