1

我正在尝试按客户对象名称的字母顺序按顺序添加一个新的客户对象(应该是 node.data,而不是节点)。但它不起作用。它以未排序的顺序打印出列表(与原始顺序保持不变)。

public void  add(Customer newNode, int dummy){
   if (head == null){ // The first node
      head = tail = this;
      head.setData(newNode);
      size=1;
      return;

   }else{
       CustomerList last = null;
       for(CustomerList node = head; 
               node != null && node.getData().toString().compareTo(newNode.name) < 0; 
                    node = node.next){
          last = node; 

       }
       CustomerList newList = new CustomerList(newNode);
       newList.setNext(last.next);
       last.next = newList;
   }

} // add

从 txt 文件输入客户对象。应按字母顺序(客户名称)再次打印出来。

10121,Airgo Fresh ods,OH,870023
10125,Bird Out fittered ,MI,870023
10134,Kit river ,IL,870023
10167,Mouin Gontaods,OR,870021
10178,Theiasu El senter,CA,870022

从 txt 文件读取数据并创建对象并添加到列表的代码:

public void byCustomerName()
 {
 records = null;
 System.gc();
 CustomerList.setHead(null);
 records = new CustomerList();
 try
  {
  String line;
  StringTokenizer st;
  String id, name, state, salesrep;
  BufferedReader infile = new BufferedReader(new FileReader("Customer.txt"));
  while ((line = infile.readLine()) != null)
      {
      st = new StringTokenizer(line, ",");
      id = st.nextToken(",");
      name = st.nextToken(",");
      state = st.nextToken(",");
      salesrep = st.nextToken(",");
      records.add(new Customer(id, name, state, salesrep), 99);
      }
  infile.close();
  } catch (IOException x) { System.err.println(x); } 
 } // byCustomerName
4

3 回答 3

1

我认为你的代码有各种各样的问题。一方面,我从来没有看到你更新head,或者tail你是否替换了第一个或最后一个元素。此外,没有检查last可能是null. CustomerList如果不知道您的一些基础项目是如何工作的,就很难说更多。

于 2013-03-15T03:23:45.050 回答
0

实际上,我在两个学期前做了同样的作业,但我决定再次上课,因为我无法参加期末考试。但是由于两个学期没有编程,我现在非常生疏。我现在打算放弃并使用我第一次上课时提出的旧解决方案。

解决方案:

public void add(Customer newNode, int dummy) {  
    CustomerList before = null;
    boolean inserted = false;
    if (head == null) {  //first node   
        head = tail = this;
        head.setData(newNode);
        return;
    } else {
        CustomerList curr = head;
        while(curr != null) {
            String currentName = curr.getData().getName();
            String newNodeName = newNode.name;
            if (currentName.compareToIgnoreCase(newNodeName) > 0) {

                CustomerList cList = new CustomerList(newNode);
                cList.setNext(curr);//curr is greater than clist, therefore cList's next element is curr
                if(before!=null)
                    before.setNext(cList);
                else {  //this tests the case when 
                    //the newNode goes at the BEGINNING of the list
                    head = cList;
                }
                curr = cList;
                inserted = true;
                return;
            }
            before = curr;
            curr = curr.next;               
        }
    }
    if(!inserted) {
        add(newNode);
    }

} // add
于 2013-03-15T03:43:43.240 回答
0

正如 Sudhanshu 已经告诉你的那样,你可以Collections.sort(-)在你的对象上使用方法,List或者作为备用方法TreeSet,以防万一你想要独特的对象。最好使用内置方法,java API因为这些方法不易出错且更可靠,同时您可以减少代码和时间。

于 2013-03-15T05:38:48.010 回答