【问题标题】:How do i print this out?我如何打印出来?
【发布时间】:2019-02-07 23:21:17
【问题描述】:

我想打印出 cook3 为准备所做的工作。这应该出来:“Pebble穿上围裙”。但相反,我只得到:“穿上围裙”,所以没有名字。我正在尝试添加一个策略模式,我想我做到了,但现在唯一的问题是这个。

这是我的代码:

package cook;

import cook.domein.Restaurant;
import cook.domein.apron;
import cook.domein.classic;
import cook.domein.cook;
import cook.domein.hardRock;
import cook.domein.knives;
import cook.domein.preperation;

public class main {
public static void main(String[] args) {
    Restaurant rest = new Restaurant();

    cook cook1 = new cook("");
    cook cook2 = new cook("Glenn");
    cook cook3 = new cook("Pebble");

    rest.addCook(cook1);
    rest.addCook(cook2);
    rest.addCook(cook3);

    rest.doPreparation(new apron());


}
}

这是我的界面:

   package cook.domein;

  public interface preperation {
          public void doPreparation(String naam);


}

这是我的子类围裙

 package cook.domein;

 public class apron implements preperation {
    @Override
    public void doPreparation(String naam) {
    System.out.println(naam+"Putting on a Apron");
}

   }

这是我的餐厅课:

    package cook.domein;

导入 java.util.ArrayList; 导入 java.util.List;

公共类餐厅实现准备{ 列出厨师;

public Restaurant() {
    this.cooks= new ArrayList<cook>();
}

public void addCook(cook cook) {
    this.cooks.add(cook);

}

public void removeCook(cook cook) {
    this.cooks.remove(cook);
}
public String calculateTotal(){
    for(cook cook: cooks){
        cook.getNaam();
    }
    return "";

}
public void doPreparation(preperation prepMethod){
    String naam = calculateTotal();
    prepMethod.doPreparation(naam);
}

@Override
public void doPreparation(String naam) {
    // TODO Auto-generated method stub

}


 }

还有烹饪课: 包厨师.domin;

     public class cook {
private cook naam;

public cook(cook naam) {

    this.naam = naam;

}

public cook(String string) {
    // TODO Auto-generated constructor stub
}

public cook getNaam() {
    return naam;
}

public void setNaam(cook naam) {
    this.naam = naam;
}




  }

【问题讨论】:

  • 我们看不到您的Restorant 类,可能您想将Cook 实例传递给rest.doPreparation(...)
  • 很不清楚。您正在使用我们一无所知的餐厅和厨师课程。此外,请为您的类选择有意义的英文名称,并尊重 Java 命名约定:类以大写字母开头。
  • 这是我的餐厅课程:List 厨师;公共餐厅() { this.cooks= new ArrayList(); } public void addCook(cook cook) { this.cooks.add(cook); } public void removeCook(cook cook) { this.cooks.remove(cook); } public String calculateTotal(){ for(cook cook: cooks){ cook.getNaam(); } 返回 ””; } public void doPreparation(preperation prepMethod){ String naam = calculateTotal(); prepMethod.doPreparation(naam); } @Override public void doPreparation(String naam) { // TODO 自动生成的方法存根 }
  • @JBNizet:老实说,只要拼写一致,我不介意它叫什么。约定要求良好的风格,但如果它足够可读,它也不会糟糕......
  • @Makoto:它永远不会保持一致,因为您将始终使用名称以大写字母开头的标准类。顺便说一句,即使不考虑标准类,也不一致:餐厅以大写字母开头,而所有其他类都不是。

标签: java design-patterns system.out


【解决方案1】:

您将一个空字符串传递给您的 doPreparation 方法。原因如下:

public String calculateTotal(){
    for(cook cook: cooks){
        cook.getNaam();
    }
    return "";
}

此方法将返回一个空字符串。这就是为什么你得到你的输出;它按设计工作。

您可能打算遍历餐厅中的所有厨师并与他们一起进行准备工作。这是解决此问题的一种方法。

public void doPreparation(preperation prepMethod){
    for(cook currentCook : cooks) {
        prepMethod.doPreparation(currentCook.getNaam());
    }
}

【讨论】:

  • 非常感谢,你是救命稻草:D
猜你喜欢
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-01
相关资源
最近更新 更多