1

我对面向对象编程还很陌生,所以在掌握一些基本概念时仍然有些困难。所以在这里我试图创建一个基本的库存程序来跟踪库存。每只股票都包含几个细节:公司名称、股票评级(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();



}

}

所以我的问题如下:

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

非常感谢您的帮助。

4

4 回答 4

3

private Stock [] 股票,是不是表示股票盘点程序会将信息存入数组?如果是,我如何将与特定股票、公司名称、价格等相关的所有详细信息存储在一起。

你的数组就像一个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);
}

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

这些面向对象的设计原则应该可以帮助您理解数据容器之间的关系。

对于问题的第二部分,您可以只看比较其中一个数据值,例如companyName,或实现类似Comparable的接口。

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

读入名称、评级、价格和股数后,您需要调用 Stock 类的构造函数来创建该类的实例并将其分配给 stock[] 数组中的下一项。

像这样:

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

如果用户不想输入所有 12 条信息,您可能需要提供某种方法来在特定条件下中断循环。但是,这完全取决于您的要求。在这种情况下,您可能必须使用其他选项,例如 List 或 vector。

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

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

您可以在此处发布更新的代码并登录,以便获得有关您的异常的建议

于 2012-06-02T03:06:05.110 回答
0

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

  • price 不应该是整数,因为价格通常是特定货币的金额。检查这个与钱有关的问题
  • 使用枚举可以更好地表示股票评级。见文档
于 2012-06-02T04:33:33.097 回答