1

私はオブジェクト指向プログラミングにかなり慣れていないので、基本的な概念のいくつかを理解するのにまだ問題があります。そこで、ここでは、在庫を追跡するための基本的な在庫プログラムを作成しようとしています。各株式には、会社名、株式格付け(AAA、AAa、Aaa、そのようなもの)、購入価格、株式数などの詳細が含まれています。プログラムは、コマンドラインプロンプトからこれらの詳細を入力するようにユーザーに求めます。また、ユーザーは最大12株しか入力できません。ユーザーが在庫を2回入力すると、エラーが出力されます。また、ユーザーが1つの株を2回入力すると、エラーメッセージも出力されます。

これが私がこれまでに行ったことです:ストックオブジェクト

 public class Stock {

private String companyName;
private String stockRating;
private int price;
private int numberOfShares;

public String getCompanyName() {
    return companyName;
}

public int getStockRating() {
    return stockRating;
}

public String getPrice() {
    return price;
}

public int getNumberOfShares() {
    return numberOfShares;
}

public Stock(String companyName, String stockRating, int price, int numberOfShares) {
    super();
    this.companyName = companyName;
    this.stockRating = stockRating;
    this.price = price;
    this.numberOfShares = numberOfShares;
}

今、私は在庫在庫プログラムを作成しようとしています

import java.util.*;

public class StockInvetory {

private static final int INVENTORY_SIZE = 12;
private Stock [] stocks;

public StockInvetory() {
    stocks = new Stock [INVENTORY_SIZE];

}

private static void StockInventory() {
       for (int i = 0; i<INVENTORY_SIZE; i++){
         Scanner console = new Scanner(System.in);

    System.out.println ("Stock's name:");
    String stockName = console.next();

    System.out.println ("Stock's rating");
    String stockRating= console.next();

    System.out.println ("Stock's price:");
    int stockPrice = console.nextInt();

    System.out.println ("Numbers of shares: ");
    int numberShares= console.nextInt();

          stocks [i]= new Stock(stockName, stockRatings, stockPrice, numberShares);
    }

public static void main (String [] args){
    StockInventory();



}

}

だから私の質問は次のとおりです:

最初の在庫オブジェクトプログラムは問題ないはずです。私の問題は在庫在庫プログラムです。このコード、private Stock [] stocksでは、在庫在庫プログラムが情報を配列に格納することを意味しますか?そうである場合、特定の株式、会社名、価格などに関連するすべての詳細を一緒に保存するにはどうすればよいですか。すべての詳細を追跡するために、多次元配列を作成する必要がありますか?同様に、1つの行には、1つの株式に関するすべての詳細が含まれ、2番目の行には別の株式に関する詳細が含まれます。また、ユーザーが1つの株を2回入力したかどうかを判断するために、「equalsIgnoreCase」を使用して比較を行いますか?私はおそらく在庫在庫のために別のメソッドを作成する必要があることを知っています。

よろしくお願いします。

4

4 に答える 4

3

private Stock [] stocks、それは在庫在庫プログラムが情報を配列に保存することを意味しますか?そうである場合、特定の株式、会社名、価格などに関連するすべての詳細を一緒に保存するにはどうすればよいですか。

あなたの配列はlist株のようなものです。ただし、オブジェクトが1つだからといって、1つのデータしか含まれていないわけではありません。文字列、int、およびその他のユーザー定義のデータ型を保持できます。したがって、在庫に関連するデータをStockオブジェクト内に保存することができます。

public class Stock {

private String companyName;
private String stockRating;
private int price;
private int numberOfShares;

これらはすべて各Stockオブジェクトに格納されており、定義したgetterメソッドからアクセスできます。

int stockdata = stocks[4].getPrice();

ただし、配列を初期化するには、次のように、領域ごとStockに新しいオブジェクトを作成する必要があります。Stock

for(int i = 0; i < INVENTORY_SIZE; i++) {
    stocks[i] = new Stock(foo, bar, lorem, ipsum);
}

ここで使用される変数は単なるプレースホルダーであるため、上記のようにコンソールから読み取ることでパラメーターを作成できます。

OOPのこれらの設計原則は、データコンテナーの関係を理解するのに役立ちます。

質問の2番目の部分では、のようなデータ値の1つを比較するか、companyNameComparableようなインターフェースを実装することを検討できます。

for(Stock s : stocks) {
    if(stockName.equals(s.getCompanyName()) {
       // ERROR!
    }
}
于 2012-06-02T01:20:59.513 に答える
3

名前、評価、価格、共有数を読み取ったら、クラスStockのコンストラクターを呼び出して、クラスのインスタンスを作成し、stocks[]配列の次のアイテムに割り当てる必要があります。

そのようです:

stocks[0] = new Stock( stockName, stockRating, stockPrice, numberShares);

次に、コンソールから読み取るために使用しているコード行と、新しいStockオブジェクトを作成する私の行をループに入れて、12の株すべてを読み取ることができるようにする必要があります。

for( int i = 0; i < INVENTORY_SIZE; i++ )
{
    System.out.println ("Stock's name:");
    String stockName = console.next();

    System.out.println ("Stock's rating");
    String stockRating= console.next();

    System.out.println ("Stock's price:");
    int stockPrice = console.nextInt();

    System.out.println ("Numbers of shares: ");
    int numberShares= console.nextInt();

    stocks[i] = new Stock( stockName, stockRating, stockPrice, numberShares);
}

さて、これは完璧ではありません。ユーザーは常に12株のフルセットを入力する必要があるため、完了した場合にユーザーがループを中止できるようにする方法を理解する必要があります。重複が入力されていないことを確認するために、必要なエラーチェックを追加する必要がありますが、個々のオブジェクトを初期化し、それぞれを配列要素に割り当てる必要があります。

于 2012-06-02T01:27:18.107 に答える
0

実際のシナリオでは、いくつかの質問が思い浮かびます。

  • 価格は通常特定の通貨での金額であるため、価格は整数であってはなりません。このお金に関連する質問を確認してください。
  • 株価の評価は、列挙型を使用してより適切に表すことができます。ドキュメントを参照してください
于 2012-06-02T04:33:33.097 に答える
0

ユーザーが12の情報すべてを入力したくない場合は、特定の条件でループを中断する方法を提供することをお勧めします。しかし、それは完全にあなたの要件にあります。その場合、リストやベクトルなどの他のオプションを使用する必要がある場合があります。

各オブジェクトは、各オブジェクトにバインドされているケースの評価、価格、名前、シェアなど、複数の変数を持つことができます。したがって、オブジェクトを配列のインデックスに格納すると、実際には、そのオブジェクトに含まれるすべての情報が1か所に格納されます。したがって、この場合、多次元配列を作成する必要はありません。

オブジェクトをequalとして定義するものに基づいて、equalsメソッドをオーバーライドし、それを使用して、同じ在庫が再度提供されるかどうかを判別できます。これは、両方のオブジェクトが同じである場合はtrueを返し、そうでない場合はfalseを返します。

更新されたコードを投稿してここに記録すると、例外に関する提案を得ることができます

于 2012-06-02T03:06:05.110 に答える