编写使用接口和单独类的组合的Java方法

时间:2014-04-12 13:40:25

标签: java

这是一个使用Java接口的作业。总共有3个类和一个界面:SellerSellerImplSellerTestDriverProduct。我将在Seller类中实现SellerImpl接口,并使用我在SellerTestDriver类中编写的代码测试输出。到目前为止,只有一种方法可以得到我想要的结果 - getName()。其他方法似乎调用Product类,但我无法编写任何可行的代码。我想要的是阅读方法:

name - 贝克(已经这样做了);

product - 面包;提供产品 - 真实;

sellProduct() - 只是总结卖家和产品的一行文字。

任何帮助将不胜感激!

Seller界面:

     public interface Seller
{
public String getName();
public Product getProduct();
public boolean provideProduct(String productName);
public Product sellProduct();
}

SellerImpl类:

    public class SellerImpl implements Seller
{
protected String name;
protected Product product;

// TODO: Complete this constructor
public SellerImpl(String name, Product product)
    {
    this.name = name;
    this.product = product;
    }

// TODO: Complete these methods 
public String getName()
    {
    return name;
    }

public Product getProduct()
    {
    return product;
    }
public boolean provideProduct(String productName)
    {
    if (productName.length() == 0) {
    return null != null;
    }
    else {
    return true;
    }
    }


public Product sellProduct()
    {
    return product;
    }

}

SellerTestDriver上课:

    public class SellerImplTestDriver
{
    public static void main(String[] args)
        {
        Seller seller = new SellerImpl("Baker", new Product("Bread", 1.95));
        // TODO: Write a test for the getName() method
        System.out.println("Seller is a: " + seller.getName());

        // TODO: Write a test for the getProduct() method
        System.out.println("Seller offers: " + seller.getProduct());

        // TODO: Write a test for the provideProduct() method
        System.out.println("Does this seller supply this item? " + seller.provideProduct("Bread"));

        // TODO: Write a test for the sellProduct() method
        System.out.println(seller.getName() +" sells " );           }

Product课程(我根本没有被要求接触):

    public class Product
{
protected String itemName;
protected double itemPrice;

public Product(String name, double price)
    {
    itemName = name;
    itemPrice = price;
    }
public String getName()
    {
    return itemName;
    }
public void setName(String itemName)
    {
    this.itemName = itemName;
    }

public double getPrice()
    {
    return itemPrice;
    }
public void setPrice(double itemPrice)
    {
    this.itemPrice = itemPrice;
    }
}

我目前的成绩:

卖家是:贝克 - 我喜欢这个,这是正确的

卖家报价:seller.Product@7a3e72

这位卖家是否提供此商品?假

买方将购买seller.Product@7a3e72

2 个答案:

答案 0 :(得分:3)

这样:Product@7a3e72

您正在看到Product的toString()方法返回的String,该方法继承自Object,即所有Java类的父类。 Object中的此默认toString()方法显示类名,@符号和对象的hashCode,并且所有类都自动继承此方法,除非它们或其父类之一选择覆盖它。

要解决此问题,您需要这样做:为您的Product类提供一个不错的public String toString()覆盖方法,该方法返回一个完整描述产品状态的String。可能您的toString()方法将返回产品的名称和价格。类似的东西:

@Override
public String toString() {
  return "Product: " + name + ", " + price;
}

甚至更好,

@Override
public String toString() {
  return "Product: " + name + ", " + currencyFormat.format(price);
}

其中decimalFormat是使用货币实例的NumberFormat变量:

private NumberFormat currencyFormat = NumberFormat.getCurrencyInstance();

答案 1 :(得分:1)

让我们看看高层。您是不是希望卖家类的实施能够容纳多个产品,并拥有每个产品的库存? (因此SellerImpl类应该保留产品列表和每个产品的库存数量。也许provideProduct意味着您必须查看产品列表,看看您是否拥有正确的产品名称和库存> 1(将是true);并且sellProduct类会将产品返回给用户并减少库存数量?

  • 卖家getName .. ok ..
  • 卖家getProduct ..实施ok,测试错误。您想要获取产品,然后查看产品的名称是否匹配"面包"。像
  • 这样的东西
theProduct = seller.getProduct();
theProductName = theProduct.getName();
theProductPrice = theProduct.getPrice();

然后测试产品名称和产品价格是否符合您的要求

  • 卖家提供产品..您不想测试卖家的产品是否具有特定价值?您正在测试输入参数。你想要像SellerImpl类那样的东西

      

    if(productName == null)返回false;       return product.getName()。equalsIgnoreCase(productName)

  • sellProduct看起来不错,但请记住测试时确保返回的值不为空,并且名称和价格符合您的预期。