- - PR -
配列の作り方について
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-04-20 23:34
はじめまして。
JSPを使ってBEANからとってきた配列(test)から重複するものを取り除いた 新しい配列(newtest)を作ろうとしています。 下記のようなコードを書いてもnewtest[]のなかには何も値が入ってきません。 どのようにすれば良いのでしょうか?ご教授ください。 下がそのソースです。 String newtest[]= new String[test.size()]; for (i = 0;i < test.size();i++) { for (int j = 0;j < test.size();j++) { if(newtest.get(j).equals("")){ //空の場合 newtest[j]=test.get(i).toString(); }else if(test.get(i).equals(newtest[j])){ //一致したものがある場合 break; } } } | ||||
|
投稿日時: 2004-04-20 23:59
単なるアルゴリズムの問題なので、 良く考えてくださいとしか良いようがない気もしますが、 コードを見て気になるのは。。。 ・このコードってコンパイル通りますか? ・test.size() や newtest.get(j) のようなコードがありますが、 testとnewtestは配列なんですよね?それともCollectionですか? ・newtest.get(j).equals("")とありますが、Javaの配列の初期値が 何かご存知ですか? | ||||
|
投稿日時: 2004-04-21 00:13
返信ありがとうございます。
test.size() に関しては 配列testの個数が表示されています。 また、if(newtest.get(j).equals("")){ では たとえばnewtest.get(0)のときには空白ではないのでしょうか?? あまりにも 初心者過ぎてすみません。 | ||||
|
投稿日時: 2004-04-21 01:57
YOU@IT さんが仰ったことをもう一度読み返してみましょう。
String[] の型に対して get(int) などというメソッドはつかえません。 コンパイルできないはずです。 "test" はもしかすると List のインスタンスなのかもしれませんが・・・・。 | ||||
|
投稿日時: 2004-04-21 02:08
返信ありがとうございます。
test は ArrayList です。(すみません もれてました) 配列の初期値で 空白や空ではなかったので newtest.get(j).equals("") で取れないことはわかりました。 | ||||
|
投稿日時: 2004-04-21 11:22
少しヒントを。。 最終的に配列がほしいのであるとして、まずはListで操作(Iteratorを使うと楽です) して、最後にtoArrayメソッドを使うのがよいと思います。 あと配列の要素の初期値はnullです。中身が確定していない配列を宣言するときは気をつけましょう。 | ||||
|
投稿日時: 2004-04-21 11:42
順序の保持にこだわらなくてもいいのなら、
Set set = new HashSet(test); String[] newTest = (String[])set.toArray(new String[set.size()]); ではどうでしょうか? | ||||
|
投稿日時: 2004-04-26 10:55
みきさんが作ったのをできるだけ活かして作ったみました。
参考になればと思って。。。 import java.io.*; import java.util.*; public class Test { public static void main(String[] args) { //testに何が入ってるか分からなくて適当に入れました。 ArrayList test = new ArrayList(); String [] strMoji = {"aaa","bbb","ccc"}; test.add(strMoji[0]); test.add(strMoji[1]); test.add(strMoji[2]); //ここでnewしたばかりなのに下のほうではなぜtestの値と同じがあるかどうかをチェックしてますかね。わけがありますか。 String newtest[]= new String[test.size()]; //排列の要素は全てNULLです。 for (int i = 0;i < test.size();i++) { for (int j = 0;j < test.size();j++) { //Stringの比較が間違ってますね。 //if(newtest.get(j).equals("")){ if(newtest[j]==null){ //空の場合 newtest[j] = test.get(i).toString(); break; }else if(test.get(i).equals(newtest[j])){ //一致したものがある場合 break; }else{ // } } } for (i = 0;i < newtest.length;i++) { System.out.println(newtest[i]);//testに入力したのをここで確認できます。 } } } 他のやりかたがほしいならまた質問してくださいね。 これくらいは解ってるかもしれませんがもしかしたらと思って書いてみました。 [ メッセージ編集済み 編集者: 未記入 編集日時 2004-04-26 11:00 ] | ||||
1
