【问题标题】:Java Print Products in Basket篮子中的 Java 打印产品
【发布时间】:2015-01-11 00:43:48
【问题描述】:

今天我一直在尝试做的事情几乎没有成功,我想我会去StackOverflow问聪明人。

我要做的是创建两个类:Basket 和 Product。 Product 类如下所示:

public class Product
    {
    private final String identifier;
    private final float price;
    public Product(final String productIdentifier, float productPrice) {
        identifier = productIdentifier;
        price = productPrice;
    }
    public String getIdentifier() {
        return identifier;
    }
    public float getPrice() {
        return price;
    }
    public void print() {
        System.out.println(identifier + "   " + price + " EUR");
    }
}

我现在尝试做的 Basket 类应该能够做一些事情。首先也是最重要的是,它应该将产品添加到购物篮并在控制台上打印出来。后者是我遇到的巨大困难。

这是我目前所拥有的:

import java.util.ArrayList;

public class Basket
{
    private ArrayList<Product> products;

    public Basket()
    {
        produkte = new ArrayList<Product>();
    }
    public void addProduct(final String productIdentifier, final float productPrice)
    {
        produkte.add( new Product (productIdentifier, productPrice));
    }
    public void printBasket() 
    {
        //Print products in basket using the print() function of the Product class.
    }
}

我尝试了很多方法让它打印出我添加的产品。然而,他们如此无果,以至于我现在发现自己在这里寻求帮助。

到目前为止我尝试过的看起来是这样的:

for(int i = 0; i < products.size(); i++) 
{
    Product.print();
}

这让我回想起我不能在静态上下文中使用 print()。所以我尝试让 print() 成为一个静态函数,但它不起作用,因为我在其中使用了非静态变量标识符和价格。

我觉得我缺少的只是一件小事,但是作为 Java 新手,我可能只是错过了很多时间。我希望的是朝着正确的方向轻推,并指出我做错了什么。

【问题讨论】:

  • 是的,这是一个容易犯的错误。这里要记住的关键是您必须访问特定的对象引用而不是类名。 Product.print() 表示您正在执行一些与特定 Product 对象无关的静态方法。该方法必须声明为static 方法才能工作。有关使用它的示例,请查看 java api 中的 Math 对象。 ControlAltDel 的回答将引导您朝着正确的方向前进。

标签: java class methods arraylist


【解决方案1】:

你在哪里Product.print();

试试products.get(i).print();

应该修复它

【讨论】:

  • 它确实修复了它。 -facepalm- 我知道这很简单。谢谢。
【解决方案2】:

从实例化的 Product 对象调用 Product 的 print 方法,您就可以开始了。您必须指定要打印的 Product 对象,否则您将不知道要使用哪些变量(这就是 static 不起作用的原因)。

【讨论】:

    【解决方案3】:

    你是正确的,你需要一个循环,但这是不对的:

    for(int i = 0; i < products.size(); i++) 
    {
        Product.print();
    }
    

    Product 是一个类,所以你不能在它上面调用非静态方法。您想在列表中的对象上调用print,而不是在整个班级上。为此,我们必须“循环”列表以依次访问其中的每个对象:

    for(int i = 0; i < products.size(); i++) 
    {
        products.get(i).print();
    }
    

    您还可以使用 for-each 循环,这清楚地表明您重新处理列表中的每个元素(因为这些循环的用途):

    for(Product p : products) 
    {
        p.print();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-20
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      • 2020-04-08
      • 1970-01-01
      • 1970-01-01
      • 2016-07-24
      相关资源
      最近更新 更多