0

こんにちは、イテレータを使用して一般的なリストを反復処理する方法に行き詰まっています。

たとえば、私はこのようなものを持っています:

public class a{
     protected int _b;
     protected String _c;
     protected float _d;
     protected int _e;
public a(int b, String c, float d, int e){
            // assign value _b,_c,_d,_e
}

     static class ab implement Iterable<a>{
           public static List myList = new ArrayList(a);
           public static void addlist(a f){
                   myList.add(f);
           public Iterator<a> iterator(){
                   return myList.iterator()}// overriding List iterator method

次に、メイン メソッドで、クラス a のインスタンスを作成して _b、_c、_d、_e の値を割り当て、それを myList に追加しますが、イテレータを使用すると、リストは表示されませんが、そのリストのメモリ位置 (推測) が表示されます. クラスaのすべてのフィールドを1つずつ表示したい。私が何をすべきか何か提案???

4

2 に答える 2

2

it doesnt show the list but it shows the memory location( i guess)of that list..

メソッドをオーバーライドしていないため、メモリの場所が表示されているため、デフォルトの実装toStringにフォールバックしています。クラスでメソッドObjectをオーバーライドする必要があります。toStringa

次のようなものを追加すると:

public String toString()
{
    return // Some string data. 
}

aクラスに対して、正しい出力が表示されるようになります。

: Java の命名規則では、すべてのクラスは大文字で開始し、すべての単語に大文字を使用する必要があると規定されています。すなわち: a -> A.

于 2013-04-14T11:01:04.807 に答える
1

toString()Class でメソッドをオーバーライドしaます。

 @Override
 public String toString() {
    return "_b:"+_b+",_c:"+_c+"_d:"+_d+",_e:"+_e;
 }

toString()がオーバーライドされていない場合、 Classaは Class から継承されたものを使用しObjectます。

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
于 2013-04-14T11:04:42.257 に答える