[java] iterator を使って中身を表示する

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dic
記事: 658
登録日時: 15年前
住所: 宮崎県
連絡を取る:

[java] iterator を使って中身を表示する

#1

投稿記事 by dic » 9年前

C言語より、javaの方が新しいという言語をいう情報をかぎつけjavaを勉強しています。

いま、Accountクラスを コレクションフレームワークListに格納したまではうまくいったのですが、
格納した内容を順次表示されるところで、

■C:\Users\owner\Documents\Visual Studio 2010\jcpad231\ソースコード> javac Main4_6.java
Main4_6.java:18: エラー: 不適合な型: Iterator<Account>をList<Account>に変換できません:
List<Account> it = list.iterator();
^
Main4_6.java:19: エラー: シンボルを見つけられません
while( it.hasNext() ) {
^
シンボル: メソッド hasNext()
場所: タイプList<Account>の変数 it
Main4_6.java:20: エラー: シンボルを見つけられません
int i = it.next().getNumber();
^
シンボル: メソッド next()
場所: タイプList<Account>の変数 it
エラー3個

とエラーメッセージがでてしまい、コンパイルが通りません。
C/C++ののりでやっているのですが、やっぱり違うようですね。

ソースコードを載せておきます。
どこが悪いのか、オーバーライドしないといけない関数などがありましたら、
教えていただけないでしょうか?

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
望む結果、 クラスAccount のインスタンスを2つ作り、
それぞれにナンバーを代入、 java.util.* コレクションフレームワークを使って
iterator を使い、中身を表示したい。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

ソースコードを載せておきます。
Account.java

コード:

public class Account implements Comparable<Account> {
	String accountNo;
	int number;
	
	public boolean equals( Object o ) {
		if( o == this ) return true;
		if( o == null ) return false;
		if( !(o instanceof Account)) return false;
		Account r = (Account)o;
		if( !this.accountNo.trim().equals(r.accountNo.trim())) {
			return false;
		}
		return true;
	}
	
	public int compareTo( Account obj ) {
		if( this.number < obj.number ) {
			return -1;
		}
		if( this.number > obj.number ) {
			return 1;
		}
		
		return 0;
	}
	
	public int getNumber() {
		return this.number;
	}
	
	public Account iterator() {
		return this;
	}
}
Main4_6.java

コード:


import java.util.List.*;
import java.util.*;

public class Main4_6 {
	public static void Main( String[] args ) {
		List<Account> list = new ArrayList<Account>();
		
		Account	a1 = new Account();
		a1.number = 10;
		Account a2 = new Account();
		a2.number = 20;
		
		list.add( a1 );
		list.add( a2 );
		
		Collections.sort(list);
		
		//	list のソートされた内容をiterator を使って表示したい。
		List<Account> it = list.iterator();
		while( it.hasNext() ) {
			int i = it.next().getNumber();
			System.out.println( it );
		}
	}
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: [java] iterator を使って中身を表示する

#2

投稿記事 by みけCAT » 9年前

エラーメッセージの通りIteratorはListではないので、

コード:

List<Account> it = list.iterator();
ではなく

コード:

Iterator<Account> it = list.iterator();
と書くといいでしょう。

また、

コード:

System.out.println( it );

コード:

System.out.println( i );
の間違いではないでしょうか?
dic さんが書きました:C/C++ののりでやっているのですが、やっぱり違うようですね。
違うとは言えないです。
C++でも

コード:

std::vector<int> hoge;
std::vector<int> it = hoge.begin();
と書くのはおかしいですよね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

dic
記事: 658
登録日時: 15年前
住所: 宮崎県
連絡を取る:

Re: [java] iterator を使って中身を表示する

#3

投稿記事 by dic » 9年前

>>みけCATさん
訂正ありがとうございます。

言われた通り変更したらコンパイルは通ったのですが、実行でエラーになってしまいます。

エラーメッセージは

C:\User\owner.../jcpad231\ソースコード>java Main4_6 エラー:メインメソッドが
クラスMain4_6で見つかりません。次のようにメイン・メソッドを定義してください。
   public static void main(String[] args)
またはJavaFXアプリケーション・クラスはjavafx.application.Applicationを拡張する必要があります
-- Press any key to exit (Input "c" to continue) --

です。

少しソースコードをいじりました。
Account.java

コード:


public class Account implements Comparable<Account> {
	String accountNo;
	int number;
	
	public boolean equals( Object o ) {
		if( o == this ) return true;
		if( o == null ) return false;
		if( !(o instanceof Account)) return false;
		Account r = (Account)o;
		if( !this.accountNo.trim().equals(r.accountNo.trim())) {
			return false;
		}
		return true;
	}
	
	public int compareTo( Account obj ) {
		if( this.number < obj.number ) {
			return -1;
		}
		if( this.number > obj.number ) {
			return 1;
		}
		
		return 0;
	}
}
Main4_6.java

コード:

import java.util.List.*;
import java.util.*;

public class Main4_6 {
	public static void Main( String[] args ) {
		List<Account> list = new ArrayList<Account>();
		
		Account	a1 = new Account();
		a1.number = 10;
		Account a2 = new Account();
		a2.number = 20;
		
		list.add( a1 );
		list.add( a2 );
		
		Collections.sort(list);
		
		//	list のソートされた内容をiterator を使って表示したい。
		Iterator<Account> it = list.iterator();
		while( it.hasNext() ) {
			int i = it.next().number;
			System.out.println( i );
		}
	}
}
Main4_6.java に main メソッドはあるのですが、なぜでしょうか?
AccountクラスのcompareTo()メソッドをオーバーライドしたことと関係があるのでしょうか?

dic
記事: 658
登録日時: 15年前
住所: 宮崎県
連絡を取る:

Re: [java] iterator を使って中身を表示する

#4

投稿記事 by dic » 9年前

わかりました!

Main4_6.java の5行目の Main -> main
に変更したところうまく実行できて、望む結果も取得できました。

解決しました。

閉鎖

“C言語何でも質問掲示板” へ戻る