在任务的条款中,我需要覆盖toString
方法以返回ArrayList
的每个第二个元素:
@Override
public String toString() {
String str = "";
for (int y = 1; y <= list.size() - 2; y += 2) {
str += list.get(y) + " ";
}
return str;
}
但是当我尝试从另一种方法调用它来打印保存的字符串值时:
public void print() {
System.out.println(list.toString());
}
它打印出数组的所有元素,如:[0,1,2,3,4,5]。
我做错了什么?
答案 0 :(得分:2)
包含的代码不足以确定,但有两个可能存在的问题:
必须创建一个新类,list必须是新类的成员。
答案 1 :(得分:1)
如果要覆盖方法,则必须创建自己的类。例如:
public class MyList<T> extends ArrayList<T> {
private static final long serialVersionUID = 1L;
public MyList() {
super();
}
@Override
public String toString() {
String str = "";
for (int y = 1; y < super.size(); y += 2) {
str += super.get(y) + " ";
}
return str;
}
}
如果你实例化MyList
,你会看到你想要的东西。
public static void main(String... args) throws Exception {
MyList<String> list = new MyList<String>();
for(int i = 0; i < 10; i++) {
list.add(String.valueOf(i));
}
System.out.println(list);
}
输出:
1 3 5 7 9
或者,可能更好的方法是简单地定义接受参数并调用它的方法。
public String toString(Collection<?> list) {
String str = "";
for (int y = 1; y < super.size(); y += 2) {
str += super.get(y) + " ";
}
return str;
}
这样称呼:
System.out.println(toString(list));
答案 2 :(得分:0)
您似乎没有覆盖toString
类中的ArrayList
,而只是来自您自己班级的默认toString
。只有在执行myclass.toString()
时才会调用此方法。
另外为什么要尝试通过覆盖toString
来做到这一点?这将对整个项目产生影响,因此您将无法在其他类中使用默认的toString
。
只需创建一个返回所需字符串的函数吗?
public String customArrayListToString(ArrayList<> list){
String str = "";
for (int y = 1; y <= list.size()-1; y += 2) {
str += list.get(y) + " ";
}
return str;
}
或在其他答案中发布,并创建自己的扩展ArrayList
答案 3 :(得分:-1)
您必须覆盖要使用它的类中的toString
,否则将调用非重写方法,因为该类会调用默认的`consturctor及其方法。