我是使用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;
所以我要做的就是让系统打印出每个房间的内容。欢迎任何帮助,并赞赏:)
答案 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);