首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >程序为圣诞节烘焙曲奇,类不能正常工作。

程序为圣诞节烘焙曲奇,类不能正常工作。
EN

Stack Overflow用户
提问于 2015-12-17 13:40:09
回答 2查看 91关注 0票数 2

我试着做一个程序,在程序中输入配料的名称和数量,以及烤箱的温度。程序应该将它们混合在一起,并告诉我是否可以烘烤它们。

Zutat类是原料的类别,有名称和数量。Teig类是用来混合所有原料的面团。它对每种原料都说出了用来制作面团的名称和数量,最后还写着“生面团”之类的东西。是烤箱用的那种。它应该在一定温度下烤面团。用维纳切斯班是用来把面团放在一起的。先加入原料,然后制作面团,然后在温度下烘烤。如果温度低于200,它会在屏幕上显示“饼干很棒”,否则“你烧了它们”。

我对用类和方法编程很陌生,我有点喜欢上Weihnachtsbaeckerei的课程。有人能帮我解决这个问题吗?在不改变其他类的情况下?

提前谢谢你!

代码语言:javascript
复制
 public class aufgabe12 {

public class Zutat{
    public String Namen;
    public int Menge;
} 

public class Teig{
    public boolean geknetet;
    public void zutatHinzufugen(String Zutat){ 
        System.out.println("Zutat hinzugefuegf: " + Zutat.Namen + " (" + Zutat.Menge + "g)");
    }
    public void kneten(){
        geknetet = true;
        System.out.println("Teig geknetet");
    }
}

public class Ofen{
    public boolean backen(String Teig, int Temperatur){
        if(Temperatur<200){
            return(true);
        } else {
            return(false);
        }
    }
    public void kneten(){}
}

public void main(String[] args){
    public class Weihnachtsbaeckerei{
        Zutat zutat1 = new Zutat();
        Zutat zutat2 = new Zutat();
        Zutat zutat3 = new Zutat();
        zutat1.Namen = "Mehl";
        zutat1.Menge = 200;
        zutat2.Namen = "Zucker";
        zutat2.Menge = 100;
        zutat3.Namen = "Eier";
        zutat3.Menge = 150;
        zutatHinzufugen(zutat1);
        zutatHinzufugen(zutat2);
        zutatHinzufugen(zutat3);
        kneten();
        ofen(zutat1, 180);
        ofen(zutat2, 180);
        ofen(zutat3, 180);
        if(ofen==true){
            System.out.println("Hmmmm lecker");
        } else {
            System.out.println("Leider schief gegangen");
        }
    }
}

有错误的行是:

代码语言:javascript
复制
System.out.println("Zutat hinzugefuegf: " + Zutat.Namen + " (" + Zutat.Menge + "g)");
zutat1.Namen = "Mehl";
zutat1.Menge = 200;
zutat2.Namen = "Zucker";
zutat2.Menge = 100;
zutat3.Namen = "Eier";
zutat3.Menge = 150;
zutatHinzufugen(zutat1);
zutatHinzufugen(zutat2);
zutatHinzufugen(zutat3);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-17 14:09:43

圣诞快乐。请考虑我对您的代码所做的更改。

首先-你的Teig需要接受一个Zutat,而不是一个字符串:

代码语言:javascript
复制
        // Add a Zutat, not a String
        public void zutatHinzufugen(Zutat dazu) {
            System.out.println("Zutat hinzugefuegf: " + dazu.Namen + " (" + dazu.Menge + "g)");
        }

然后,你会想要烘烤整个泰格,而不是单一的祖顿:

代码语言:javascript
复制
    public class Ofen {
        // You bake the Teig, not the Zutat
        public boolean backen(Teig teig, int Temperatur) {
            if (Temperatur < 200) {
                return (true);
            } else {
                return (false);
            }
        }

    }

如果Teig不是gerührt,您可能想要抛出一个异常。

最后,在您的主创建一个Teig,创建一个Ofen,如果所有放在一起:

代码语言:javascript
复制
public void main(String[] args) {

        Teig teig = new Teig();

        Zutat zutat1 = new Zutat();
        Zutat zutat2 = new Zutat();
        Zutat zutat3 = new Zutat();
        zutat1.Namen = "Mehl";
        zutat1.Menge = 200;
        zutat2.Namen = "Zucker";
        zutat2.Menge = 100;
        zutat3.Namen = "Eier";
        zutat3.Menge = 150;

        teig.zutatHinzufugen(zutat1);
        teig.zutatHinzufugen(zutat2);
        teig.zutatHinzufugen(zutat3);
        teig.kneten();

        //You need an ofen
        Ofen ofen = new Ofen();

        //You bake only once
        if (ofen.backen(teig, 180)) {
            System.out.println("Hmmmm lecker");
        } else {
            System.out.println("Leider schief gegangen");
        }
    }

以下是完整的代码:

代码语言:javascript
复制
public class WeihnachtsbaeckereiTest {

    public class Zutat {
        public String Namen;
        public int Menge;
    }

    public class Teig {

        public boolean geknetet;

        // Add a Zutat, not a String
        public void zutatHinzufugen(Zutat dazu) {
            System.out.println("Zutat hinzugefuegf: " + dazu.Namen + " (" + dazu.Menge + "g)");
        }

        public void kneten() {
            geknetet = true;
            System.out.println("Teig geknetet");
        }
    }

    public class Ofen {
        // You bake the Teig, not the Zutat
        public boolean backen(Teig teig, int Temperatur) {
            if (Temperatur < 200) {
                return (true);
            } else {
                return (false);
            }
        }

    }

    public void main(String[] args) {
        Teig teig = new Teig();
        Zutat zutat1 = new Zutat();
        Zutat zutat2 = new Zutat();
        Zutat zutat3 = new Zutat();
        zutat1.Namen = "Mehl";
        zutat1.Menge = 200;
        zutat2.Namen = "Zucker";
        zutat2.Menge = 100;
        zutat3.Namen = "Eier";
        zutat3.Menge = 150;

        teig.zutatHinzufugen(zutat1);
        teig.zutatHinzufugen(zutat2);
        teig.zutatHinzufugen(zutat3);
        teig.kneten();

        //You need an ofen
        Ofen ofen = new Ofen();

        //You bake only once
        if (ofen.backen(teig, 180)) {
            System.out.println("Hmmmm lecker");
        } else {
            System.out.println("Leider schief gegangen");
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2015-12-17 14:08:54

在你的情况下,我会建议一个不同的方法。当然,可以将所有类放在类aufgabe12中(这有点拼写错误,因为根据代码约定,类应该以大写字母开头,所以最好使用Aufgabe12)。

如果您想要创建一个面向对象的程序,我建议您将这些类拆分一下,并为每个类创建单个文件。将变量声明为私有变量,并使用getter和setter。例如,它应该是这样的:

代码语言:javascript
复制
public class Zutat{
  private String namen;
  private int menge;
  //talking about conventions, don't use upper case letters for variables unless they are constants.


public String getNamen(){
  return this.namen;
}

public void setNamen(String namen){
    this.namen = namen;
}

//do the same thing with the variable "menge".

//it's also a good idea to create a constructor for that class that creates an instance of Zutat for you. That would look as follows:

public Zutat(String namen, int menge){
    this.namen = namen;
    this.menge = menge;
}

}

在main方法中,您可以创建如下所示的实例。

代码语言:javascript
复制
public void static main(String[] args){
Zutat z1 = new Zutat("Mehl", 200);
}

如前所述,不能在方法中指定类。这就是导致编译错误的原因。

考虑到语义,我想您应该从将aufgabe12替换为Weihnachtsb ckerei开始。(不要使用“tho”)这应该是环绕主方法的类。

把所有这些放在一起,你就可以得到以下信息:

代码语言:javascript
复制
public class Weihnachtsbaeckerei{

public static void main(String[] args){

    Teig teig = new Teig();
    Zutat zutat1 = new Zutat("Mehl", 200);
    Zutat zutat2 = new Zutat("Zucker", 100);
    Zutat zutat3 = new Zutat("Eier", 150);

    teig.zutatHinzufugen(zutat1);
    teig.zutatHinzufugen(zutat2);
    teig.zutatHinzufugen(zutat3);
    teig.kneten();

    Ofen ofen = new Ofen();

    if (ofen.backen(teig, 180)) {
        System.out.println("Hmmmm lecker");
    } else {
        System.out.println("Leider schief gegangen");
    }
}
}

Zutat.java

代码语言:javascript
复制
public class Zutat{

private String namen;
private int menge;

public Zutat(String namen, int menge){
    this.namen = namen;
    this.menge = menge;
}

public String getNamen(){
    return this.namen;
}

public int getMenge(){
    return this.menge;
}

}

Teig.java

代码语言:javascript
复制
public class Teig{
private boolean geknetet;

public void zutatHinzufugen(Zutat zutat){ 
    System.out.println("Zutat hinzugefuegf: " + zutat.getNamen() + " (" + zutat.getMenge() + "g)");
}

public void kneten(){
    this.geknetet = true;
    System.out.println("Teig geknetet");
}
}

Ofen.java

代码语言:javascript
复制
public class Ofen{
public boolean backen(Teig teig, int temperature){
    if(temperature < 200){
        return(true);
    } else {
        return(false);
    }
}
//Der Ofen knetet nicht...and it's never called. Therefore delete this method.
public void kneten(){}
}

希望这能帮上忙..。既然你的任务现在已经解决了两次。我不知道将代码分成不同的类和文件是否是任务的一部分,但这基本上是Java效率的原因,所以请记住这一点。如果你有任何问题,不要犹豫。圣诞快乐!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34336037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档