- PR -

要素数未定の配列の値同士の比較の仕方

1
投稿者投稿内容
りみ
会議室デビュー日: 2005/04/04
投稿数: 12
投稿日時: 2005-04-06 17:35
基本的な事を質問させていただきますが・・

要素数未定の配列の値同士の比較はどのように行なえば
良いかを教えていただきたいのですが、

--例えば--------------------------------------------
配列Aと配列Bがあるとしまして、

配列Aのある値と配列Bのある値が
一致した場合には処理@を、
しなかった場合には処理Aを行いたいという場合、

(当然ですが・・)下記の書き方では、
処理が配列Bの要素数だけ繰返し行なわれてしまいます。

処理@が行なわれる回数 + 処理Aが行なわれる回数
= 配列Aの要素の数だけ

としたいのですが、

どのようにすればよいのでしょうか。
- - - - - - - - - - - - - - - - - - - - - - -
for(int i = 0; i < A.size(); i++ ) {
 for(int j = 0; j < B.size(); j++ ) {
  if(A.get(i) == B.get(i)){
処理@
   }else{
処理A
   }
 }
}
- - - - - - - - - - - - - - - - - - - - - - -
けろ
会議室デビュー日: 2005/04/06
投稿数: 4
投稿日時: 2005-04-06 17:54
for(int i = 0; i < A.size(); i++ ) {
 for(int j = 0; j < B.size(); j++ ) {
  if(A.get(i) == B.get(i)){
処理@
   }else{
処理A
   }
 }
}

二つ目のループ内のB.get(i)はB.get(j)の間違いだとして・・・。
boolean flg;
for(int i = 0; i < A.size(); i++ ) {
 flg=false;
for(int j = 0; j < B.size(); j++ ) {
  if(A.get(i) == B.get(j)) flg=true;
}
 if(flg) {
  処理@
 }else{
  処理A
 }
}
でいかがでしょう?

[ メッセージ編集済み 編集者: けろ 編集日時 2005-04-06 17:56 ]

[ メッセージ編集済み 編集者: けろ 編集日時 2005-04-06 17:57 ]

[ メッセージ編集済み 編集者: けろ 編集日時 2005-04-06 17:58 ]
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-04-06 18:15
私なら…の書き方です。
(C言語でよくやっていたなぁって書き方です。)

for(int i = 0; i < A.size(); i++ ) {
int j = 0 ;
for( ; j < B.size(); j++ ) {
  if(A.get(i) == B.get(j)) break ;
}
if( j < B.size() ) {
処理@
} else {
処理A
}
}

・・・で気になったのですが、比較は==じゃなくてequalsメソッド?
(値の比較がオブジェクトとして等しいのかオブジェクトの中身が等しいか分からなかったので、==のままにしてみました)
未記入
会議室デビュー日: 2005/04/06
投稿数: 15
投稿日時: 2005-04-06 18:29
A.size() や、A.get(i) で取得しているところを見ると
Java.util.Vector の気がするので

contains

使ってください。
# あとは自分で調べてね。

概要 (Java 2 プラットフォーム SE v1.4.0)http://java.sun.com/j2se/1.4/ja/docs/ja/api/
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2005-04-06 18:56
引用:

・・・で気になったのですが、比較は==じゃなくてequalsメソッド?
(値の比較がオブジェクトとして等しいのかオブジェクトの中身が等しいか分からなかったので、==のままにしてみました)



推測するに、オブジェクトが等しいというより、値の比較をしたそうなので
equalsでしょうね、たぶん。
りみ
会議室デビュー日: 2005/04/04
投稿数: 12
投稿日時: 2005-04-06 20:04
返信ありがとうございます!!

さっそく試してみたのですが・・
(先ほど上げさせていただいた例では出来る事は分かったのですが)

そもそも現在行おうとしている事が少しだけ
面倒(?)なので、方法を変えようかと検討中です・・。

しかし、わざわざありがたくも、皆様に返信・ご教授いただきましたので、
(なのに出来なかったので・・)
何がしたかったかをあげさせて頂きます・・

詳細抜けがあるかも知れませんが、ざざっと
実際に行いたい例を下に書きました。

(JSP)
------------------------------------------------------------------------


<% ArrayList arrayB = (ArrayList)session.getAttribute("array"); %> ←@
<jsp:useBean id="Obj" class="○○○" scope="session"/> ←A

<% for(int i = 0; i < (Obj.getA()).size(); i++ ) { %> ←B
<tr>
<td><%= (Obj.getA()).get(i) %></td>
<td><%= (Obj.getB()).get(i) %></td>
<td><%= (Obj.getC()).get(i) %></td>
<% for(int j = 0; j < (Obj.getA()).size(); j++ ) { %> ←B

(イメージ的に・・)
- - if((String)(Obj.getA()).get(i)==(String)arrayB.get(j))){) -- - -
<td><input type="checkbox" name="Nantoka" value="<%= 〜 %>"></td>←C
- - (}else{) - - - - - - - - - - - - - - - - - - - - - - - - - - -
<td><input type="checkbox" name="Nantoka" value="<%= 〜 %>"CHECKED></td>←C
- - -(}) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
</tr>
<% } %>
<% } %>

------------------------------------------------------------------------

@セッションからゲットした(配列Bとする)
AセッションからゲットしたObj(配列Aとする)
B配列Aの要素数だけ複数項目のリストを書き出したいので
forしなければならない。
その際、
C比較したい値が(String)(Obj.getA()).get(i)と(String)arrayB.get(j))で、
 一致した時はCHECKEDをつけて表示させたい・・・のですが
比較したい値がget.(i)とget.(j)の為(←おそらく?)うまくいきません

という事なのですが、

何の為にこんな面倒な事を・・とわれにかえったのですが、
ただ、JSP画面AでCHECKされ JSP画面Bにリンクし、
JSP画面Aに戻った時に、CHECKEDさせたものを表示させたいだけなのですが、
・・
とっても無駄な事をしているような気がしてきました・・。

しかし、これとは別に、配列の値同士の比較の方法が分かって勉強になりました。
返信いただいた方、ありがとうございます
りみ
会議室デビュー日: 2005/04/04
投稿数: 12
投稿日時: 2005-04-06 21:53
先ほどの・・・ですが
けろさんの方法で、判定を変えることによって
ループで表を表示しているものでも
うまくいきましたーありがとうございました。

-------------------------------------------
(略)

<% String = hantei;

for(int i = 0; i < 配列A.size(); i++ ){
 for(int j = 0; j < 配列B.size(); j++ ){
  if(配列Aの値あ.get(i).equals(配列Bの値あ.get(j))){
hantei=(配列Aの値あ.get(i));
}
}%>
<tr>
<td><%= (配列Aの値あ.get(i)) %></td>
<td><%= (配列Aの値い.get(i)) %></td>
<td><%= (配列Aの値う.get(i)) %></td>
<% if(hantei.equals((配列Aの値あ.get(i)))){ %> ←★
<td><input type="checkbox" name="Nantoka" value="〜" CHECKED></td>
<%}else{%>
<td><input type="checkbox" name="Nantoka" value="〜"></td>
<%}%>
</tr>
<%}%>

★で判定させる事によって出来ました。

1

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