gpt4 book ai didi

java - 如何重写 toString 方法以在 Java 中显示列表中的元素?

转载 作者:行者123 更新时间:2023-12-01 07:54:16 25 4
gpt4 key购买 nike

我几个小时以来一直试图解决这个问题,但找不到有效的答案。

为了完整起见,我在下面发布了完整的代码。如果我不重写 toString 方法,我将获得该对象的哈希码的表示形式。

我尝试使用以下内容:

 public  String toString(List<?> list) {
String result = " ";
for (int i = 0; i < list.size(); i++) {
result += " " + list.get(i);
}
return result;
}

但是,这似乎没有帮助,因为我仍然获得对哈希码的引用。我知道这是因为我没有正确重写 toString 方法;当我包含 @Override 注释时出现错误,但这是我所能得到的。

我查看了其他一些答案,这些答案说重写 toString 方法在列表/集合的情况下没有用,但没有给出其他替代方案的适当指导。

public class WordsContainer {
Collection<String> wordList = new ArrayList<String>();

public void wordGroup1() {
wordList.add("Ant");
wordList.add("Almond");
/// more words
}

public Collection<String> getRandomWords() {
wordGroup1();
LinkedList<String> wordLinkedList = new LinkedList<String>(wordList);
ArrayList<String> subList = new ArrayList<String>();

int i = 0;
while (i < 6) {
int index = (int) Math.random() * 10;
if (!subList.contains(wordLinkedList.get(index))) {
subList.add(wordLinkedList.get(index));
i++;
}
}
return subList;
}

public String toString(List<?> list) {
String result = " ";
for (int i = 0; i < list.size(); i++) {
result += " " + list.get(i);
}
return result;
}
}

public class wordsContainerTest {
public static void main(String[] args) {
wordsContainer list1 = new wordsContainer();

list1.wordGroup1();

System.out.println(list1);

}


}

编辑:

抱歉,我忘了提及我尝试删除 Override 方法中的参数,如下所示:

public  String toString() {
LinkedList<String> list = new LinkedList<>()
String result = " ";
for (int i = 0; i < list.size(); i++) {
result += " " + list.get(i);
}
return result;

}但是当我运行代码时,控制台什么也没有显示。我意识到这是因为我实例化了一个空列表,但此时我不知道还能做什么。

最佳答案

toString()没有参数。像这样覆盖它(假设您正在扩展 List 类):

@Override
public String toString() {
String result = " ";
for (int i = 0; i < this.size(); i++) {
result += " " + this.get(i);
}
return result;
}

更新01

好吧,看来您真正想做的是打印 WordsContainer 封装的列表的内容。

像这样覆盖WordsContainer的toString:

@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(" "); // remove this if you do not want two spaces at the front of the returned string
for (int i = 0; i < this.wordList.size(); i++) {
sb.append(" " + this.wordList.get(i).toString());
}
return sb.toString();
}

请注意,您必须将 wordList 的声明更改为 List<String> 类型.

更新02

这回答了评论中的后续问题。

您可以声明一个静态实用程序方法,该方法构建任何给定字符串列表内容的字符串表示形式,如下所示:

public static String getStringRepresentation(List<String> list) {
StringBuilder sb = new StringBuilder();
sb.append(" "); // remove this if you do not want two spaces at the front of the returned string
for (int i = 0; i < list.size(); i++) {
sb.append(" " + list.get(i).toString());
}
return sb.toString();
}

并像这样使用这个方法:

public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("foo");
list.add("bar");
String listStringRepr = WordsContainer.getStringRepresentation(list);
System.out.println(listStringRepr);
}

关于java - 如何重写 toString 方法以在 Java 中显示列表中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32288231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com