人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Javaの質問です。
>|Java|
alreadyUrl[alreadyNum] = nextAddress;
alreadyNum++;
nextAddress = urlReturn();//新しいURLを返すメソッド
for(int i=0;i < alreadyNum;i++){
if(nextAddress == alreadyUrl[i]){
nextAddress = urlReturn();
}
}
||<
上記のようなプログラムをurlReturn()がnullを返すまで、ぐれぐると回します。一度出てきたURLは省きたいので、一度出てきたURLはalreadyURL変数に入れて、新しくurlRetrun()が返してきたURLと付き合わせて重複がないかチェックしたいと思っています。しかしなぜか、alreadyURLの配列とnextAddressのイコールがきちんと動いてくれません。alreadyURLの配列に最後に入れたURLとnextAddressがイコールだった場合は、きちんと判別してくれるのですが、それ以外の場合はなぜか無視されます。なぜでしょうか。

たぶんこの説明では分かりにくいかと思いますので、少しでもこうではないかという心当たりがありましたら何でもいいのでお願いいたします。

●質問者: Nasinanasi
●カテゴリ:コンピュータ 学習・教育
✍キーワード:Java URL イコール プログラム メソッド
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Mook
●35ポイント

おそらく文字列の比較の部分が問題なのでしょう。

http://www.asahi-net.or.jp/~dp8t-asm/java/articles/notes/03/arti...

文字列の比較は == ではなく、 equals を使用します。

String a = new String("abc");
String b = new String("def");

if ( a.equals( b ) ) {
 System.out.println("Same");
}

蛇足ですが、今回の場合 ArrayList を使用するとスマートな気がします。

下記に簡単なサンプルを例示します。

String nextAddress;
ArrayList<String> alreadyUrl = new ArrayList<String>();
int i;

while( ( nextAddress = urlReturn() ) != null ) {
for( int i=0; i<alreadyUrl.size() ; i++ ){
if( nextAddress.equals( alreadyUrl.get(i) ) {
break;
}
}
if ( i == alreadyUrl.size() ) {
alreadyUrl.add( nextAddress );
}
}

http://www.nextindex.net/java/collection/ArrayList.html

(実行にはArrayList クラスのインポートが必要です。)

◎質問者からの返答

ありがとうございます!

equalsでちゃんと動くようになりました。

サンプルまで書いていただいて、ほんとうに助かります。こちらのほうが断然スマートですね。参考にさせていただきます!


2 ● newta
●35ポイント

まずクラスの中身を比べたいときは

equalsメソッドを使いましょう。

ポインタが同じであると断言できるのならば == でも良いですが。

次に

if(nextAddress == alreadyUrl[i]){

nextAddress = urlReturn();

}

となっていますが、

==の場合、urlReturn()が実行され、

その返ってきた値はちゃんとチェックされるのでしょうか?

ここで出されているプログラムは

プログラムとしてコンパイルできるものではないので

ちょっと分からないですが。

◎質問者からの返答

ありがとうございます!equalsでしたね。すっかり忘れていました。

あと、ご指摘もありがとうございます。質問文には、省略して書いちゃいましたが、ちゃんとチェックするようにしております。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ