0

重複の可能性:
Java オブジェクトのデフォルト toString

ファイルリーダーからリストを印刷すると、[myServiceOrder@3bc1cac、myServiceOrder@32fe621e、myServiceOrder@5adbb9b9、myServiceOrder@f7e4f49、myServiceOrder@2d874991、myServiceOrder@ceee5f1、myServiceOrder@183a37d9] になるのはなぜですか。

public class myServiceOrder implements ServiceOrder, Comparable<myServiceOrder>{

private int number=0;
private String ownerName="";
private String make="";
private String model="";
private int year=0;

public myServiceOrder(int number, String ownerName, String make, String model,  int year) {
    this.number=number;
    this.ownerName=ownerName;
    this.make=make;
    this.model=model;
    this.year=year;
}

public myServiceOrder() {
    // TODO Auto-generated constructor stub
}

@Override
public void setOrderNum(int orderNumber) {
    number=orderNumber;
}

@Override
public void setYear(int year) {
    this.year=year;
}

@Override
public void setOwner(String ownerName) {
    this.ownerName=ownerName;
}

@Override
public void setMake(String make) {
    this.make=make;
}

@Override
public void setModel(String model) {
    this.model=model;

}

@Override
public String getOwner() {
    return ownerName;
}

@Override
public String getMake() {
    return make;
}

@Override
public String getModel() {
    // TODO Auto-generated method stub
    return  model;
}

@Override
public int getOrderNum() {
    // TODO Auto-generated method stub
    return number;
}

@Override
public int getYear() {
    // TODO Auto-generated method stub
    return year;
}

@Override
public String getMakeModelYear() {
    // TODO Auto-generated method stub
    return make+ " "+ model+ " "+ year+ " ";
}

@Override
public boolean equals(ServiceOrder otherServiceOrder) {
        if (getOrderNum()==otherServiceOrder.getOrderNum())
            return true;
        else
    return false;
}

@Override
public int compareTo(ServiceOrder otherServiceOrder, int key) {
    int comparisonResult=0;
    if(key==1)
    {
        if(getOrderNum()< otherServiceOrder.getOrderNum())
            comparisonResult= -1;
        if(getOrderNum()== otherServiceOrder.getOrderNum())
            comparisonResult= 0;
        if(getOrderNum()> otherServiceOrder.getOrderNum())
            comparisonResult= 1;
    }
        else if(key==2)
        {
            comparisonResult = getOwner().compareTo(otherServiceOrder.getOwner());                      
        }

        else if(key==3)
        {
         comparisonResult = getOwner().compareTo(otherServiceOrder.getOwner());
        }
    return comparisonResult;

}

@Override
public int compareTo(myServiceOrder arg0) {
    // TODO Auto-generated method stub
    return 0;
}

}


import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Scanner;
import javax.swing.JOptionPane;


public class List extends LinkedList<myServiceOrder> {
private static  LinkedList<myServiceOrder> newList = new LinkedList();

 public  void  Print() throws Exception
 {
     System.out.println(newList);
 }
public   LinkedList<myServiceOrder> createServiceOrder(File inFile) throws Exception {
    int number=0;
     String ownerName="";
     String make="";
     String model="";
     int year=0;
     myServiceOrder serviceList = new myServiceOrder();    
        Scanner fileScan=new Scanner(inFile);
            while (fileScan.hasNext())
            {
                String ignore;

                number = fileScan.nextInt();
                //System.out.println(number);
                ignore = fileScan.nextLine(); // ignore the newline
                ownerName = fileScan.nextLine();
            //  System.out.println(ownerName);
                make = fileScan.nextLine();
        //      System.out.println(make);
                model = fileScan.nextLine();
            //  System.out.println(model);
                year = fileScan.nextInt();
        //      System.out.println(year);
                ignore = fileScan.nextLine(); // ignore the newline
                  serviceList = new myServiceOrder( number,  ownerName,  make,        model,  year);         
                  newList.add(serviceList);

            }
        fileScan.close();


     //   System.out.println(newList.viewAll());
        return newList; 
    }


}

わかりました、私は密集していました。2 番目の質問もあります。GUI で選択したオプションに応じて、3 つの異なる方法でリストを並べ替える必要がComparableありcompareToますcompareTo(Object o, int key)。ソート方法がオブジェクト o の場合、そのキーをどのように使用できますか。を使ってみるべきComparatorですか?key=1私のListクラスでそのようにソートするように指示するにはどうすればよいですか?

4

4 に答える 4

7

myServiceOrder クラスで toString() メソッドのオーバーライドが欠落している典型的なケースです。

実装例については、こちらをご覧ください。このページRohit の回答では、 toString() をオーバーライドする必要がある理由について説明しています。




Argh は非常に遅い今まであなたの 2 番目の質問を見ていませんでした:

インターフェイスの使用とインターフェイスの使用の違いについては、この質問この質問を参照してください。ComparableComparator

于 2012-09-29T22:43:59.983 に答える
3

myService オブジェクトをどのように出力したいか、Java はどうやって知るのでしょうか? toString をオーバーライドすることで確認できます。

@Override
public String toString() {
    return "myServiceObject#" + number + "[" + ownername + ", " + make + ", " + model + ", " + year + "]";
}
于 2012-09-29T22:48:24.210 に答える
1
System.out.println(newList);

これにより、リスト内の各参照 (この場合はオブジェクト)を順番に呼び出すクラスのtoString()メソッドが自動的に呼び出されます。独自のメソッドを提供していないため、デフォルトのメソッドが使用されます。これにより、参照変数を出力する Java のデフォルトの方法である面白い出力が得られます。他の何かを見たい場合は、クラスに実装することで、これを行う方法を Java に伝える必要があります。LinkedListtoString()ServiceOrdertoString()ObjectmyServiceOrder@3bc1cactoString()ServiceOrder

于 2012-09-29T22:49:06.620 に答える
1

印刷されるのは、実際には toString メソッドをオーバーライドせずに印刷するオブジェクトのハッシュコードです..印刷しているLinkedListので、それを行うことはできません..むしろ、リストを反復処理して個々の要素を印刷することができます: -

public  void  Print() throws Exception
 {
    for (myServiceOrder so: newList) {
         System.out.println(so)
    }
 }

さて、それ自体がオブジェクトであるため..そのクラスでserviceOrderオーバーライドする必要があります..toString()

@Override
public String toString() {
    return this.ownerName + this.make + "[" +  this.model + " - " + String.valueOf(this.year) + "]";            
}
于 2012-09-29T22:45:26.243 に答える