原谅我的格式化,我是编码和这些电路板的新手。我正在尝试将一个简单的待办事项列表作为java中的练习。它读取并解析文本文件中的数据,然后对其进行排序和打印。
我的输出如下: [ToDoList003_002.ToDo@4cc7014c] 输出应该是这样的:[获得牛奶,重要,高优先级,紧急]
package ToDoList003_002;
import java.util.*;
import java.io.*;
public class ToDoList002 {
ArrayList<ToDo> toDoList=new ArrayList<ToDo>();
public static void main(String[] args) {
new ToDoList002().go();
}//close main
public void go(){
getItems();
Collections.sort(toDoList); //002
System.out.println(toDoList);
}
void getItems(){
try{
File file=new File("/Users/lew/Dropbox/JAVA/CodePractice/src/ToDoList003_002/todolist.txt");
BufferedReader reader = new BufferedReader (new FileReader(file));
String line=null;
while ((line=reader.readLine()) !=null){
addItem(line);
}
}catch(Exception ex){
ex.printStackTrace();
}
}
void addItem(String lineToParse){
String[] tokens=lineToParse.split("/");
//toDoList.add(tokens[0]);
//toDoList.add(tokens[1]);
ToDo nextTodo= new ToDo(tokens[0], tokens[1],tokens[2],tokens[3]);
toDoList.add(nextTodo);
}
//private static void add(String string) {
// TODO Auto-generated method stub
}
package ToDoList003_002;
import java.util.ArrayList;
public class ToDo implements Comparable<ToDo>{
String detail;
String importance;
String priority;
String urgency;
public int compareTo (ToDo d){
return detail.compareTo(d.getDetail());
}
ToDo(String d, String i, String p, String u){
detail=d;
importance=i;
priority=p;
urgency=u;
//set variables in constructor
}
public String getDetail(){
return detail;
}
public String getImportance(){
return importance;
}
public String getPriority(){
return priority;
}
public String getUrgency(){
return urgency;
public String toString(){
return detail;
}
答案 0 :(得分:1)
您可以使用for-each
循环打印列表内容,如下所示:
注意:您必须覆盖toString()
课程的ToDo
并使用此
public static void main(String[] args) {
List<String> ls = new ArrayList<String>(); // use ToDo instead of String here
ls.add("a");
ls.add("b");
ls.add("c");
for (String s : ls) {
System.out.println(s);
}
}
O / P
a
b
c
覆盖toString()
类的Todo
,如下所示:
@Override
public String toString() {
return detail + "," + importance ; // add other fields if you want
}
答案 1 :(得分:0)
ToDo 类应覆盖 toString 方法,以提供对象的字符串表示
class ToDo {
...
@Override
public String toString() {
return this.priority + "," + ...;
}
...
}
答案 2 :(得分:0)
您需要覆盖toString()
ToDo
例如:
@Override
public String toString() {
return detail + "," + importance + "," + priority + "," + urgency;
}
答案 3 :(得分:0)
当您调用System.out.println(someObject);
时,您将调用该对象上的toString()
方法。 ArrayList
不会覆盖从toString()
继承的标准Object
方法,因此结果为类型名称+ @ + hashcode 。
您需要覆盖toString()
列表中的ToDo
,以便精确打印。然后采用一种方法来打印您的收藏品,例如
System.out.println(Arrays.toString(toDoList.toArray()));
请参阅Printing Java collections nicely获取更多灵感。
答案 4 :(得分:0)
此行告诉您正在将ToDo对象添加到列表
toDoList.add(nextTodo);
然后您正在对对象进行排序并尝试打印它们。
Collections.sort(toDoList);
System.out.println(toDoList);
首先从列表中取出Todo对象,然后尝试获取对象的值 像这样的东西
for(ToDo todo : toDoList)
{
System.out.println(todo.getDetail()+"\t"+
todo.getImportance()+"\t"+
todo.getPriority()+"\t"+
todo.getUrgency());
}
答案 5 :(得分:0)
您需要覆盖toString方法。从oracle docs:
public String toString()
返回对象的字符串表示形式。一般来说, toString方法返回一个&#34;文本表示&#34;的字符串。这个 宾语。结果应该是简洁但信息丰富的表示 一个人很容易阅读。建议所有人 子类重写此方法。
Object类的toString方法返回一个由。组成的字符串 对象是实例的类的名称,at-sign 字符`@&#39;,以及散列的无符号十六进制表示 对象的代码。换句话说,此方法返回一个相等的字符串 价值:
getClass()。getName()+&#39; @&#39; + Integer.toHexString(hashCode())
返回:对象的字符串表示。
示例toString()实现:
public final class Vehicle {
private String fName = "Dodge-Mercedes"
@Override public String toString() {
StringBuilder result = new StringBuilder();
String NEW_LINE = System.getProperty("line.separator");
result.append(this.getClass().getName() + " Object {" + NEW_LINE);
result.append(" Name: " + fName + NEW_LINE);
result.append("}");
return result.toString();
}
}
如果您正在使用eclipse,您可以使用 Alt + Shift + S + S自动覆盖类的