Arraylist输出没有按预期出现

时间:2014-08-13 14:54:46

标签: java eclipse arraylist

原谅我的格式化,我是编码和这些电路板的新手。我正在尝试将一个简单的待办事项列表作为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;  
}   

6 个答案:

答案 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自动覆盖类的)toString()方法。此快捷方式在生产代码中可能没用(它打印出来所有的字段名称,从安全角度来看可能并不好),但出于开发目的,它就足够了