- PR -

配列の作り方について

1
投稿者投稿内容
みき
会議室デビュー日: 2004/04/20
投稿数: 3
投稿日時: 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;
}
}
}
YOU@IT
ぬし
会議室デビュー日: 2002/03/29
投稿数: 284
お住まい・勤務地: 大阪
投稿日時: 2004-04-20 23:59

単なるアルゴリズムの問題なので、
良く考えてくださいとしか良いようがない気もしますが、
コードを見て気になるのは。。。

・このコードってコンパイル通りますか?

・test.size() や newtest.get(j) のようなコードがありますが、
 testとnewtestは配列なんですよね?それともCollectionですか?

・newtest.get(j).equals("")とありますが、Javaの配列の初期値が
 何かご存知ですか?


みき
会議室デビュー日: 2004/04/20
投稿数: 3
投稿日時: 2004-04-21 00:13
返信ありがとうございます。

test.size() に関しては
配列testの個数が表示されています。

また、if(newtest.get(j).equals("")){
では
たとえばnewtest.get(0)のときには空白ではないのでしょうか??

あまりにも 初心者過ぎてすみません。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-04-21 01:57
YOU@IT さんが仰ったことをもう一度読み返してみましょう。
String[] の型に対して get(int) などというメソッドはつかえません。
コンパイルできないはずです。
"test" はもしかすると List のインスタンスなのかもしれませんが・・・・。
みき
会議室デビュー日: 2004/04/20
投稿数: 3
投稿日時: 2004-04-21 02:08
返信ありがとうございます。

test は ArrayList です。(すみません もれてました)

配列の初期値で 空白や空ではなかったので
newtest.get(j).equals("") で取れないことはわかりました。

K
大ベテラン
会議室デビュー日: 2004/04/07
投稿数: 174
投稿日時: 2004-04-21 11:22
引用:

test は ArrayList です。(すみません もれてました)

配列の初期値で 空白や空ではなかったので
newtest.get(j).equals("") で取れないことはわかりました。


少しヒントを。。
最終的に配列がほしいのであるとして、まずはListで操作(Iteratorを使うと楽です)
して、最後にtoArrayメソッドを使うのがよいと思います。
あと配列の要素の初期値はnullです。中身が確定していない配列を宣言するときは気をつけましょう。
kn
会議室デビュー日: 2004/04/21
投稿数: 11
投稿日時: 2004-04-21 11:42
順序の保持にこだわらなくてもいいのなら、

Set set = new HashSet(test);
String[] newTest = (String[])set.toArray(new String[set.size()]);

ではどうでしょうか?
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)