按照惯例,我想注意我是一个初学者,如果我没有使用正确的术语,请提前抱歉。
我做了什么:我创建了一个方法,它在一个单独的类中输出一个配方。在主类中,我创建了一个从另一个类调用该方法的对象。
来自main:
{"articles":
[{"articleId":"1",
"articleName":"<\/head> Some text<\/body><\/html>"},
{"articleId":"2","articleName":"<\/head>Some Text Again<\/body<\/html>"}
来自其他班级:
Breakfast recipeName2 = new Breakfast();
recipeName2.frenchToast();
System.out.println(recipeName2);
问题:
认为食谱输出正确,出于某种原因,最后还添加了: ingredients.Breakfast@1f96302
我不确定它是什么或如何摆脱它。我尝试以不同的方式更改我的代码,例如更改我在 system.out.ln()参数中添加的内容,但它却搞砸了我的代码。我有预感这种情况正在发生,因为某些东西通过其他东西传递,但我试图改变我编写代码的方式无济于事。
如果有人能帮助我,我将非常感激。我继续我的项目,因为从技术上讲我的代码是有效的,但我对此感到困惑,并且真的想知道它为什么会发生。
由于
答案 0 :(得分:1)
您的错误是由于下面的行System.out.println(recipeName2);
我已经展示了如何分别在frenchToast()
和frenchToast2()
中使用void或String:
class Main {
public static void main(String[] args) {
Breakfast recipes = new Breakfast();
recipes.frenchToast();
System.out.println(recipes.frenchToast2());
}
}
class Breakfast {
public void frenchToast(){
StringBuilder sba = new StringBuilder("For French toast you will need:\n ");
sba.append("Eggs\n ");
sba.append("Bread\n ");
sba.append("Cinnamon\n ");
sba.append("Vanilla ");
System.out.println(sba.toString());
}
public static String frenchToast2(){
StringBuilder sba = new StringBuilder("For French toast you will need:\n ");
sba.append("Eggs\n ");
sba.append("Bread\n ");
sba.append("Cinnamon\n ");
sba.append("Vanilla ");
return(sba.toString());
}
}
等效输出:
For French toast you will need:
Eggs
Bread
Cinnamon
Vanilla
For French toast you will need:
Eggs
Bread
Cinnamon
Vanilla
试试here!
答案 1 :(得分:0)
您的早餐课程不会覆盖toString()
方法。因此,当您打印早餐对象时,它将使用Object::toString
方法,该方法在Java堆中打印“标识符@”。
最好回顾一下你的对象模型,但是一个简单的修复就是让FrenchToast成为一个扩展Breakfast(或者如果你使Breakfast成为接口的实现)的类,然后将strings放在toString方法中
像这样:
public interface Breakfast {}
public class FrenchToast implements Breakfast {
@Override
public String toString() {
StringBuilder sba = new StringBuilder("For French toast you will need:\n ");
sba.append("Eggs\n ");
sba.append("Bread\n ");
sba.append("Cinnamon\n ");
sba.append("Vanilla ");
return sba.toString();
}
}