Java库存 - ADT类&文件输入问题

时间:2012-04-16 03:35:17

标签: java filereader

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

我有一个程序涉及创建一个涉及凯迪拉克“库存”的程序,而在所有其他情况下,我找不到我的问题的答案。

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

以下是我必须做的事情:

  • 虚构的凯迪拉克经销商的库存,并允许搜索库存以显示符合特定标准的汽车列表。

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

  • 运行程序时,它会从文件“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。在库存中搜索具有该名称的所有汽车,并在控制台屏幕上显示结果表。

- 当用户表示他/她想要按价格搜索时,让他们输入要搜索的价格 然后执行搜索,显示搜索价格在3,000美元以内的所有汽车 价钱。 - 程序应该循环执行与用户想要的一样多的搜索。让用户结束 当询问他们想要执行的搜索类型时,通过单击“取消”按钮来编程。 第二个问题(要搜索的型号或价格)上的“取消”按钮不应该结束 程序,但您的代码应将其识别为无效条目,而不是抛出异常。 除了列表输出之外,程序中的所有输入和输出都应该使用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;
    }
}

请帮助!我对其他事情一无所知。

2 个答案:

答案 0 :(得分:1)

关于你的评论:

  

据说无法找到符号构造函数Cadillac

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

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

答案 1 :(得分: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() );

除此之外,您的代码中还有另一个明显的错误。你声明了一个字符串数组,但是试图将'Cadillac'的实例存储到其中:

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

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

祝你好运。