java - 代码输出ArrayList @ 40c84051?

时间:2013-11-17 05:05:30

标签: java arraylist

我正在尝试返回包含某种成分的食谱列表,但我的代码给了我一个奇怪的输出:ArrayList @ 40c84051。

如何制作以便输出食谱列表?

public List searchByIngredient(String target) {
   List result = new ArrayList();
   for (Object ingred : mList) {
      Recipe i = (Recipe) ingred;
      if (i.hasIngredient(target)) {
         result.addLast(ingred);
      }
   }
   return result;
 }

3 个答案:

答案 0 :(得分:0)

您所看到的可能是“System.out.println(recipeList.toString())”的结果,它只是打印了ArrayList对象的地址。

您需要在Recipe类上添加“toString()”方法,然后输出Recipes,如下所示:

ArrayList<Recipe> recipeList = ...
for (Recipe recipe : recipeList) {
    System.out.println(recipe);
}

在你的食谱类中

public String toString() {
    String description = "Ingredients: ";
    description+= ingredienets; 

    // put whatever description code here you like.

    return description;
}

答案 1 :(得分:0)

这样的消息通常是通过在未覆盖toString()方法的对象上调用Object.toString()引起的。

但令人费解的是ArrayList 覆盖了toString() ......或者更确切地说,AbstractList会这样做。

所以我怀疑你误报了输出,或者这里发生了一些非常奇怪的事情。

请向我们展示以下代码:

  • 生成输出,
  • 创建输出产生的“东西”。

一种可能性是ArrayList不是标准java.util.ArrayList,而是您自己编写的一些自定义类...并在默认包中声明。这可以解释为什么输出中没有包名。

答案 2 :(得分:0)

您需要在Recipe类中覆盖toString()。

public String toString()
{
    //Return Customized message of Recipe information.

    //such as,
    return String.format("Customized message format", args)

}

然后,您尝试打印配方对象,它将打印您指定的自定义消息。