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

编写结合使用接口和单独类的Java方法,java,Java,这是一个使用Java接口的作业。总共有3个类和一个接口:Seller、SellerImpl、SellerTestDriver和产品。我将在SellerImpl类中实现Seller接口,并使用我在SellerTestDriver类中编写的代码测试输出。到目前为止,只有一个方法给出了我想要的结果–getName()。其他方法似乎调用了产品类,但我一直无法编写任何有效的代码。我想要的是阅读的方法: name–贝克(它已经这样做了) 产品-面包;提供真实的产品 sellProduct()–只是一行文字,

这是一个使用Java接口的作业。总共有3个类和一个接口:
Seller
SellerImpl
SellerTestDriver
产品
。我将在
SellerImpl
类中实现
Seller
接口,并使用我在
SellerTestDriver
类中编写的代码测试输出。到目前为止,只有一个方法给出了我想要的结果–
getName()
。其他方法似乎调用了
产品
类,但我一直无法编写任何有效的代码。我想要的是阅读的方法:

name
–贝克(它已经这样做了)

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

sellProduct()
–只是一行文字,概述了卖家和产品

任何帮助都将不胜感激

卖方
界面:

     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;
    }
    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 " );           }
}

SellerTestDriver
class:

    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;
    }
    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@7a3e72

这个卖家供应这个商品吗?假的


买方将购买卖方。Product@7a3e72与此:
Product@7a3e72

您将看到产品的
toString()
方法返回的字符串,该方法继承自所有Java类的父类Object。对象中的默认
toString()
方法显示类名、
@
符号和对象的hashCode,所有类自动继承此方法,除非它们或它们的父类之一选择重写它

要解决这个问题,您需要这样做:为产品类提供一个适当的
公共字符串toString()
重写方法,该方法返回一个完全描述产品状态的字符串。您的
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();

使用此:
Product@7a3e72

您将看到产品的
toString()
方法返回的字符串,该方法继承自所有Java类的父类Object。对象中的默认
toString()
方法显示类名、
@
符号和对象的hashCode,所有类自动继承此方法,除非它们或它们的父类之一选择重写它

要解决这个问题,您需要这样做:为产品类提供一个适当的
公共字符串toString()
重写方法,该方法返回一个完全描述产品状态的字符串。您的
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();

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

  • 卖家getName..好的
  • 卖家获取产品..实现好的,测试错误。您想要获取产品,然后查看产品名称是否与“bread”匹配。类似
然后测试产品名称和产品价格是否符合您的要求

  • 卖方提供产品..是否要测试卖方产品是否为特定值?您正在测试输入参数。您需要类似SellerImpl类中的内容

    如果(productName==null)返回false; 返回product.getName().equalsIgnoreCase(productName)

  • sellProduct看起来不错,但请记住让测试确保返回值不为null,并且名称和价格与您期望的一致


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

  • 卖家getName..好的
  • 卖家获取产品..实现好的,测试错误。您想要获取产品,然后查看产品名称是否与“bread”匹配。类似
然后测试产品名称和产品价格是否符合您的要求

  • 卖方提供产品..是否要测试卖方产品是否为特定值?您正在测试输入参数。您需要类似SellerImpl类中的内容

    如果(productName==null)返回false; 返回product.getName().equalsIgnoreCase(productName)

  • sellProduct看起来不错,但请记住让测试确保返回值不为null,并且名称和价格与您期望的一致