- PR -

配列?

1
投稿者投稿内容
みかん
会議室デビュー日: 2003/01/26
投稿数: 6
投稿日時: 2003-02-14 21:21
javaでのプログラムを作成しています。
配列で宣言したものと同じモノがあるかどうか検索して一致するものがあれば出力するということはできるのですか?うまく説明できなくてすみません。
例えば、String kudamono[]={"みかん","りんご"};
    String norimono[]={"電車","車"};
と宣言してあるとします。
□に単語を入力するとしてkudamonoの中にあるものが入力されたら●、norimonoの中にあるものが入力されたら○と表示させたい時はどうしたらよいのですか?
参考書とか読んだのですがわかりませんでした。全然見当違いかもしれませんが、入力されるものをxとした場合if(x=kudamono[])とかでは駄目でした。初心者の私ではありますがどうかよろしくお願いします。
matobaa
常連さん
会議室デビュー日: 2002/12/26
投稿数: 21
投稿日時: 2003-02-15 01:33
StringComparableなので、
java.util.Arrays#binarySearch(Object[] a,Object key)が使えそうです。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2003-02-15 04:34
古典的なヤリカタですと

String input; // ←入力された値とします

for(int i = 0; i < kudamono.length; i++){
if(input.equals(kudamono[i].toString)){
System.out.println("●");
}
}

のように、文字列の比較は equals()メソッドを使います。
ここで if(input == kudamono[i]) とかいてしまうと
inputとkudamono[i] は同じオブジェクトか?と問うことになり、
当然違うので 常に false になり、
正しい比較を行うことができません。

ご参考になればと思います。
yamasa
ベテラン
会議室デビュー日: 2003/02/15
投稿数: 80
投稿日時: 2003-02-16 00:14
引用:

配列で宣言したものと同じモノがあるかどうか検索して一致するものがあれば出力する


コレクションフレームワークを学ぶには最適な問題ですね。

とりあえず2つほど解決案を挙げてみます。

その1:
コード:
String input; // ←入力値

if(java.util.Arrays.asList(kudamono).contains(input)) {
  System.out.println("●");
}



その2:
コード:
java.util.Set kudamono_set = new java.util.HashSet(java.util.Arrays.asList(kudamono));

String input; // ←入力値

if(kudamono_set.contains(input)) {
  System.out.println("●");
}



案1、2、そしてmatobaaさん、raystarさんが出された案のそれぞれに
どのような長所、短所があるのかについては、
みかんさんへの練習問題としておきます。

こういう問題がスマートに解決できるようになれば、
Java技術者として一段上にステップアップできると思いますよ。
Kensaku
常連さん
会議室デビュー日: 2003/02/16
投稿数: 22
投稿日時: 2003-02-16 03:16
目的としているものが、重複要素のない集合(Set)が重複しないキーに結び付けられている状態(Map)で、要素からキーを導き出す方法と考え、例を作成してみました。
もっといい方法があるかもしれませんが、参考までに。

コード:
import java.util.*;

public class Test {
  public static void main(String[] args) {
    String kudamono[]={"みかん","りんご"}; 
    String norimono[]={"電車","車"}; 
    
    Map map = new HashMap();
    map.put("●", new HashSet(Arrays.asList(kudamono)));
    map.put("○", new HashSet(Arrays.asList(norimono)));
    
    String word = "車";
    
    String result = null;
    for (Iterator i = map.entrySet().iterator(); i.hasNext(); ) {
      Map.Entry mapEntry = (Map.Entry) i.next();
      if (((Set) mapEntry.getValue()).contains(word)) {
        result = (String) mapEntry.getKey();
        break;
      }
    }
    
    System.out.println(result);
  }
}


Kensaku
常連さん
会議室デビュー日: 2003/02/16
投稿数: 22
投稿日時: 2003-02-16 12:21
先ほどの例では『要素からキーを導き出す方法』と問題を難しくしてしまいました。先の例では集合ごとに重複する要素が含まれていることを許容する作りですが、取り出すキーが単数なので意味がないどころか、ある意味バグっています。やはり順当に『キーから要素を導き出す方法』で目的を達成する例を作成してみました。
コード:
import java.util.*;

public class TestCollection1 {
  public static void main(String[] args) {
    String kudamono[]={"みかん","りんご"}; 
    String norimono[]={"電車","車"}; 
    
    Map map = new HashMap();
    for (int i = 0; i < kudamono.length; i++)
      map.put(kudamono[i], "●");
    for (int i = 0; i < norimono.length; i++)
      map.put(norimono[i], "○");
    
    String word = "車";
    
    String result = null;
    result = (String) map.get(word);
    
    System.out.println(result);
  }
}


1

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