OOP Java:创建库存清单程序

时间:2012-06-02 01:17:44

标签: java oop inventory stock

我是面向对象编程的新手,所以我在掌握一些基本概念时仍然遇到一些麻烦。所以我在这里尝试创建一个基本库存程序来跟踪库存。每个股票都包含几个细节:公司名称,股票评级(AAA,AAa,Aaa,类似的东西),购买价格和股票数量。程序将要求用户通过命令行提示输入这些详细信息。用户最多只能输入12种股票。如果用户输入两次股票,则会打印出错误。如果用户输入了两次股票,它也会打印出错误信息。

这是我到目前为止所做的:股票对象

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



}

}

所以我的问题如下:

第一个库存对象程序应该没问题,我的问题是库存盘点程序。 使用此代码,私人股票[]股票,是否意味着股票库存程序将信息存储到数组中?如果是,如何将与特定股票,公司名称,价格等相关的所有详细信息存储在一起。我是否必须创建一个多维数组才能跟踪所有细节?就像一行包含有关一个股票的所有细节,第二行包含有关另一股票的详细信息。并确定用户是否已输入两次股票,我是否使用“equalsIgnoreCase”进行比较?我知道我可能需要为库存库存创建另一种方法。

非常感谢您的协助。

4 个答案:

答案 0 :(得分:3)

  私人股票[]股票,是否意味着股票库存计划   将信息存储到数组中?如果是,我该如何存储所有   与特定股票,公司名称,价格等相关的详细信息   在一起。

您的数组就像list个股票。但仅仅因为它的一个对象,并不意味着它只包含一个数据。它可以包含字符串,整数和其他用户定义的数据类型。因此,您可以在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);
}

此处使用的变量只是占位符,因此您可以通过读取控制台来创建参数,就像上面所做的那样。

These design principles for OOP should help you understand the relationship between data and containers.

对于问题的第二部分,您可以只查看其中一个数据值,例如companyNameimplementing an interface,例如Comparable

for(Stock s : stocks) {
    if(stockName.equals(s.getCompanyName()) {
       // ERROR!
    }
}

答案 1 :(得分: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个股票,所以你需要弄清楚如果用户完成后如何让用户中止,并且你仍然需要添加你想要的错误检查,以确保没有输入重复项,但它应该初始化你的单个对象并将每个对象分配给数组元素。

答案 2 :(得分:0)

如果用户不想输入所有12个信息,您可能希望提供某种方法来在某些条件下中断循环。但是,它完全符合您的要求。 在这种情况下,您可能必须使用其他选项,如List或vector。

每个对象都可以有多个变量,例如绑定到每个对象的案例评级,价格,名称和共享。因此,当您将对象存储在数组索引中时,实际上是将该对象包含的所有信息存储在一个位置。所以在这种情况下,您不必创建多维数组。

您可以根据将对象定义为相等的方式覆盖您的equals方法,并使用它来确定是否再次提供相同的库存。如果两个对象相同,则返回true,否则返回false。

您可以发布更新后的代码并在此处登录,以便获得有关例外情况的建议

答案 3 :(得分:0)

在现实世界中,一些问题浮现在脑海中:

  • 价格不应该是整数,因为价格通常是特定货币的金额。请查看此money related question
  • 使用Enum可以更好地表示股票评级。请参阅doc