0

我遇到了这个程序的障碍。

我有一个程序涉及创建一个涉及凯迪拉克“库存”的程序,除此之外,我找不到我的问题的答案。

我只是不知道该怎么办。我将提供方向,然后发布我到目前为止的语法。

这是我必须做的:

  • 一个虚构的凯迪拉克经销商的库存,并允许搜索库存以显示满足特定条件的汽车列表。

  • 创建一个名为 Cadillac 的 ADT 类,其中包含四个实例数据字段:型号名称、库存编号和颜色的字符串,以及价格的整数。该类包含一个构造函数,它接收所有四个实例字段的值,并将参数值分配给实例变量。该类还为实例数据的每个字段包含一个简单的访问器方法和修改器方法。

  • 当程序运行时,它从文件“inventory.dat”中加载库存。

  • 以下是文件内容示例: DTS 11210 Glacier White 42706 Escalade 66502 Crimson Pearl 65547 XLR 58362 Radiant Bronze 78840 SRX 16218 Radiant Bronze 44522
  • 每行(每条记录)包含 4 个数据字段:型号名称字符串、5 位库存编号和颜色,以及价格整数。字段之间的分隔符是制表符(“\t”)。

  • 在 main() 中,创建一个 Cadillac 对象数组,从文件中读取一条记录,将其拆分为 4 个字段,创建一个 Cadillac 对象并将其添加到数组中。

  • 库存文件发生变化,无论文件中有多少记录,您的程序都需要工作。您可以保证文件中的记录永远不会超过 100 条(它们只能容纳 100 辆汽车),并且每条记录将包含 4 个有效数据字段。
  • 用户可以通过两种方式搜索库存:按型号名称和按价格。加载库存后,询问用户他们想要进行的搜索。如果他们指示“按型号名称”,请让他们输入要搜索的名称。有效的型号名称为:DTS、Escalade、ESV、EXT、SRX、STS 和 XLR。搜索具有该名称的所有汽车的库存,并在控制台屏幕上显示结果表。

-当用户表示要按价格搜索时,让他们输入要搜索的价格,然后执行搜索,显示所有价格在搜索价格3000美元以内的汽车。- 程序应该循环执行用户想要的尽可能多的搜索。当被问及他们想要执行的搜索类型时,让用户通过单击“取消”按钮来结束程序。第二个问题(要搜索的型号或价格)上的“取消”按钮不应结束程序,但您的代码应将其识别为无效条目,并且不会引发异常。除了列表输出之外,程序中的所有输入和输出都应该带有 JOptionPane 对话框。

这是我到目前为止所拥有的:

import java.util.Scanner;
import java.io.*;

public class Inventory {

    public static void main ( String[] args )
    {
    String line;
    String[] fields;
    String[] items;
    int count = 0;
    int recCount;
    Cadillac[] list = new Cadillac[100];

    try
    {
      BufferedReader br = new BufferedReader( new FileReader( "inventory.dat" ) );
      line = br.readLine();
      while( line != null )
      {
        fields = line.split( "\t" );
        items[count++] = new Cadillac( fields[0], fields[1], fields[2],
                                                fields[3] );
        line = br.readLine();
      }
      br.close();
    }
    catch( IOException e )
    {
      System.out.println( "Can't open input file. Program terminating." );
      System.exit( 1 );
    }

    }
    public static int loadArray(Cadillac[] items)
    {


    }

}

class Cadillac {
                    //Instance data
    private String model;
    private String stockNum;
    private String color;
    private int price;
                    //Constructor
    public Cadillac(String mdl, String stckNum, String clr, int prc)
    {
        model = mdl;
        stockNum = stckNum;
        color = clr;
        price = prc;
    }
                    //Set of Accessor and Mutator Methods
    public String getModel(){
        return model;
    }
    public void setModel(String newModel){
        model = newModel;
    }
    public String getStockNum(){
        return stockNum;
    }
    public void setStockNum(String newStockNum){
        stockNum = newStockNum;
    }
    public String getColor(){
        return color;
    }
    public void setColor(String newColor){
        color = newColor;
    }
    public int getPrice(){
        return price;
    }
    public void setPrice(int newPrice){
        price = newPrice;
    }
}

请帮忙!我不知道该怎么做。

4

2 回答 2

1

关于您的评论:

这是说它找不到符号构造函数凯迪拉克

您为凯迪拉克定义的唯一构造函数具有参数(String, String, String, int),但是当您尝试在 main 中实例化对象时,您向它传递了四个字符串。Java 抛出错误,因为它找不到正确的构造函数。

要么将最后一个参数作为 int 传递,要么为您的参数创建一个新的构造函数。

于 2012-04-16T04:31:47.563 回答
1

您最直接的问题是您的数据对象构造函数的签名与您调用它的方式不兼容。你已经这样声明了你的构造函数:

public Cadillac(String mdl, String stckNum, String clr, int prc)

它需要三个字符串参数和一个 int,但您使用四个字符串调用它:

new Cadillac( fields[0], fields[1], fields[2], fields[3] );

这就是您报告看到的编译错误的来源。您应该将最后一个 String 转换为 int。

new Cadillac( fields[0], fields[1], fields[2], Integer.parseInt(fields[3]).intValue() );

除此之外,您的代码中还有另一个明显的错误。您声明了一个字符串数组,但正试图将“凯迪拉克”的实例存储到其中:

String[] items;
// ...
items[count++] = new Cadillac( ... );

我不会为你编写整个作业,但我的建议是首先用简单的英语句子写下完成整个程序所需完成的每项任务。然后开始将每个单独的句子翻译成代码,理想情况下是在你的类上可以调用的方法的形式。当您遇到问题时,请回来提出具体问题,我相信这里会有人愿意为您提供更多帮助。

祝你好运。

于 2012-04-16T04:34:15.410 回答