2012-04-16 8 views
0

私はこのプログラムでロードブロッキングを達成しました。Javaインベントリ - ADTクラスとファイル入力の問題

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

私はちょうど何をすべきかわかりません。私は指示を提供し、私がこれまで持っている構文を投稿します。架空のキャデラックのディーラーのため

  • 在庫及び在庫が特定の基準を満たす車のリストを表示するために検索することができます:ここでは

    は私がしなければならないものです。

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

  • プログラムが実行されると、ファイル "inventory.dat"からインベントリが読み込まれます。含ま DTS 11210氷河ホワイト42706 エスカレード66502クリムゾンパール65547 XLR 58362ラディアントブロンズ78840 SRX 16218ラディアントブロンズ44522

  • 各行(各レコード):ここで

  • は、ファイルの内容のサンプルです4つのデータフィールド:モデル名の文字列、5桁の在庫番号、色、および価格の整数。フィールド間の区切り文字はタブ文字( "\ t")です。

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

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

ユーザーは、彼/彼女は価格で検索したい示し-When、それらを検索 価格の$ 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; 
    } 
} 

助けてください!私は何をすべきか他の考えを持っていません。あなたのコメントに関しては

+1

特にこの宿題のどの部分に問題がありますか?エラーが発生した場合は、質問に含める必要があります。他の人があなたを助けるのを助けるために、直面してポイントにしてください。 – Perception

+0

それは私がそれを修正するために私の知識にすべてを試みたシンボルコンストラクタ、Cadillacを見つけることができないと言われていますが、何も動作していません。それに加えて、私は一般に、この課題を完了するために何をすべきかを忘れています。私は、他の人が宿題をコード化するのは、実行すべきではなく、見落とさなければならないことを知っていますが、これは私が本当に苦労しているものであり、このプログラムを書く方法についてはほとんど基本的なウォークスルーが必要です。 – user1334675

答えて

1

キャデラック

それがシンボルのコンストラクタを見つけることができないと言っているキャデラックのために定義されたあなたの唯一のコンストラクタは、パラメータ (String, String, String, int)を持っていますが、オブジェクトをインスタンス化しようとすると、メインでは、4つのストリングを渡します。正しいコンストラクタが見つからないため、Javaはエラーをスローしています。

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

1

あなたの最も直面する問題は、データオブジェクトコンストラクタのシグネチャが、呼び出す方法と互換性がないことです。

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

それは3つの文字列引数とINTがかかりますが、あなたは4つの文字列でそれを呼び出している:あなたはほどあなたのコンストラクタを宣言している

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(...); 

私はあなたのために全体の宿題をコーディングしないだろうが、私のアドバイスは、平易な英語でダウン最初の右側になります各プログラムは、全体のプログラムを完了するために遂行される必要がある。その後、個々の文をコードに変換することを開始します。理想的には、呼び出すことができるクラスのメソッドの形式です。あなたが問題にぶつかるときに戻って来てと質問してください。私はここにあなたをもっと助けてくれる人がいると確信しています。

幸運。

+0

さて、私はこれをもう少し見てきました。私はもっと具体的な質問を思いつきました。 Cadillacオブジェクトの配列を作成し、「inventory.dat」ファイルからレコードを読み込み、4つのフィールドに分割し、Cadillacオブジェクトを作成して配列に追加するにはどうすればよいでしょうか。私はちょっと問題を抱えているだけですが、もしそれが得られれば、残りの部分を手に入れることができます。 – user1334675

関連する問題