0

このプログラムで障害にぶつかりました。

キャデラックの「在庫」を含むプログラムを作成するプログラムを持っていますが、とりわけ、質問に対する答えが見つかりません。

どうすればいいのかわかりません。指示を出してから、これまでの構文を投稿します。

これが私がしなければならないことです:

  • 架空のキャデラック ディーラーの在庫を表示し、在庫を検索して、特定の基準を満たす車のリストを表示できるようにします。

  • インスタンス データの 4 つのフィールドを含む Cadillac という ADT クラスを作成します。モデル名、在庫番号と色の文字列、および価格の整数です。このクラスには、4 つのインスタンス フィールドすべての値を受け取り、パラメーター値をインスタンス変数に割り当てる 1 つのコンストラクターが含まれています。このクラスには、インスタンス データの各フィールドに対する単純なアクセサ メソッドとミューテータ メソッドも含まれています。

  • プログラムが実行されると、ファイル「inventory.dat」からインベントリがロードされます。

  • ファイルの内容のサンプルを次に示します。 DTS 11210 グレイシャー ホワイト 42706 エスカレード 66502 クリムゾン パール 65547 XLR 58362 ラディアント ブロンズ 78840 SRX 16218 ラディアント ブロンズ 44522
  • 各行 (各レコード) には、モデル名の文字列、5 桁の在庫番号、色、および価格の整数の 4 つのデータ フィールドが含まれています。フィールド間の区切り文字はタブ文字 (「\t」) です。

  • main() で、Cadillac オブジェクトの配列を作成し、ファイルからレコードを読み取り、それを 4 つのフィールドに分割し、Cadillac オブジェクトを作成して配列に追加します。

  • 在庫ファイルが変更され、ファイル内のレコード数に関係なく、プログラムが動作する必要があります。ファイル内のレコードが 100 を超えることはなく (ロットには 100 台の車しか収容できません)、各レコードには正確に 4 つのフィールドの有効なデータが含まれることが保証されています。
  • ユーザーは、モデル名と価格の 2 つの方法で在庫を検索できます。インベントリを読み込んだ後、どの検索を実行したいかをユーザーに尋ねます。「機種名で」と表示された場合は、名前を入力して検索してもらいます。有効なモデル名は、DTS、Escalade、ESV、EXT、SRX、STS、および XLR です。その名前を持つすべての車の在庫を検索し、コンソール画面に結果の表を表示します。

・ユーザーが価格で検索したい場合は、検索する価格を入力して検索を実行し、価格が検索価格の $3,000 以内のすべての車を表示します。- プログラムは、ユーザーが望むだけ多くの検索を行うためにループする必要があります。実行したい検索のタイプ​​を尋ねられたときに、ユーザーが「キャンセル」ボタンをクリックしてプログラムを終了できるようにします。2 番目の質問 (検索するモデ​​ルまたは価格) の [キャンセル] ボタンでプログラムを終了するべきではありませんが、コードはそれを無効なエントリとして認識し、例外をスローしないようにする必要があります。リスト出力に加えて、プログラム内のすべての入力と出力は、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

あなたのコメントに関して:

シンボルコンストラクタ Cadillac が見つからないと言っています

Cadillac 用に定義された唯一のコンストラクターにはパラメーター(String, String, String, int)がありますが、メインでオブジェクトをインスタンス化しようとすると、4 つの文字列を渡します。正しいコンストラクターが見つからないため、Java はエラーをスローしています。

最後のパラメーターを int として渡すか、引数の新しいコンストラクターを作成します。

于 2012-04-16T04:31:47.563 に答える
1

最も差し迫った問題は、データ オブジェクト コンストラクターの署名が呼び出し方法と互換性がないことです。コンストラクターを次のように宣言しました。

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

3 つの文字列引数と int を取りますが、4 つの文字列で呼び出しています。

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

それが、あなたが報告したコンパイルエラーの原因です。最後の文字列を int に変換する必要があります。

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

それとは別に、コードには別の明らかなエラーがあります。文字列の配列を宣言していますが、'Cadillac' のインスタンスを格納しようとしています:

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

宿題全体をコーディングすることはしませんが、プログラム全体を完了するために達成する必要がある各タスクを、最初に平易な英語の文章で書き留めることをお勧めします。次に、個々の文をコードに変換し始めます。理想的には、呼び出すことができるクラスのメソッドの形式です。問題が発生したら、ここに戻って具体的な質問をしてください。喜んで助けてくれる人がここにいると確信しています。

幸運を。

于 2012-04-16T04:34:15.410 に答える