如何在字符串中显示数组列表中的内容?

时间:2015-03-16 17:58:00

标签: java arrays arraylist

我是使用java的初学者,我不知道如何让系统从字符串中输出数组列表中的内容

private void createRooms()
{
    Room townCenter, boots, tesco, library, home;

    // create the rooms
    townCenter = new Room("in the town center", contents);
    boots = new Room("in boots drug store", contents);
    tesco = new Room("in tesco's", contents);
    library = new Room("in the city library", contents);
    home = new Room("at home", contents);

注意其中的内容'我正试着在所说的房间里展示物品。

这是我启动数组列表的地方

milk = new Objects("milk");
paracetamol = new Objects("paracetamol");
book = new Objects("book");
money = new Objects("money");

tesco.addObjects(milk);
boots.addObjects(paracetamol);
library.addObjects(book);
home.addObjects(money);

数组列表本身位于不同的类中,看起来像这样

public ArrayList<Objects> contents;

所以我要做的就是让系统打印出每个房间的内容。欢迎任何帮助,并赞赏:)

5 个答案:

答案 0 :(得分:1)

ArrayList类继承了toString()方法,该方法将列表的每个元素转换为字符串。每the docs,它使用逗号将它们连接在一起,并用方括号("[]")包围整个事物。如果该格式足够好,您只需使用

即可
contents.toString()

无论何时需要字符串表示列表中的内容。

使用String.valueOf(object)将列表的每个元素转换为字符串,如果对象不是object.toString(),则会调用null。因此,如果您想要更好地表示每个元素,则需要覆盖toString()类的Objects方法。

答案 1 :(得分:0)

您需要覆盖Room类中的toString()方法。

以下是覆盖类toString()方法的示例:

@Override
public String toString() 
{ 
    return "Name: " + this.name + ", Description: " + this.description + ", Type: " + this.type;
} 

然后,您可以在ArrayList上调用toString()或将其传递给System.out.println(),它将在其上调用toString()以显示它。

例如:

System.out.println(roomList);

其中roomList是Room对象的ArrayList。

ArrayList的toString()方法遍历它包含的对象,并调用它们的每个toString()方法,以构建一个表示ArrayList的字符串。

答案 2 :(得分:0)

对于给定的room,您可以通过循环列出其内容:

String contentsAsString = "";
for(Objects object : room.getContents()) {
    contentsAsString += object.toString() + " ";
}

// Now you can use the string
Sysm.out.println("contentsAsString: " + contentsAsString);

您需要实现getContents方法以返回数组列表,并覆盖toString类中的Objects以返回其名称。


编辑:我认为最好的选择是将上述代码作为Room的成员来实现,因此您可以直接在任何房间使用它:

public class Room ...
    public String getContentsAsString() {
        // Code above.
        return contentsAsString;
    }
}

随后:

String contents = room.getContentsAsString();

答案 3 :(得分:0)

首先你应该覆盖&#34;对象&#34;的toString()。代表您房间的内容。通过这种方式,您可以为每个&#34; Objects&#34;。

提供友好的描述

在Objects类中:

@Override
public String toString() 
{ 
    return "Object: " + objectName; //use whatever variable you store "Milk" or its name in
} 

然后,您可以覆盖您的Room类的toString()方法,以提供您对房间的描述,在您的情况下,您希望通过打印出&#34;中的所有项目来完成。内容&#34;数组列表。

您可以在Room类中执行以下操作:

@Override
public String toString() 
{ 
    return "Contents in the room" + contents.toString();
} 

ArrayList有一个toString方法,它将为列表中的每个元素调用toString()方法。在我们的例子中,每个元素都是一个&#34; Objects&#34;我们只是覆盖toString()方法,以打印出我们想要的东西。

现在打电话的时候:

System.out.println(tesco)

将输出:

 Contents in the room:
 Object: Milk

答案 4 :(得分:0)

在你学习的同时,为什么不这样尝试呢。你已经提到了#34;任何帮助都表示赞赏&#34; :)

您可以使用正在传递的对象来增强此功能以进行大量操作

因此,创建一个具有抽象displayMessage的接口。

像这样,

public interface Content {
  public void displayMessage(String message);
}

public class Milk implements Content{
  public Milk(String message){
    displayMessage(message);
}
public void displayMessage(String message) {
    // You can do whatever you want with the message
    System.out.println(message);    
}
}// milk class ends here

//对其他内容做同样的事情 - 扑热息痛,书和金钱

//每个房间只传递一个内容。

Content milk = new Milk("milk");
Content paracetamol = new Paracetamol("paracetamol");
Content book = new Book("book");
Content money = new Money("money");

//现在将对象作为Room

的参数传递
// you don't have a content for this - townCenter = new Room("in the town      center", );
boots = new Room("in boots drug store", paracetamol);
tesco = new Room("in tesco's", milk);
library = new Room("in the city library", book);
home = new Room("at home", money);