0

これが事です。次のような文字配列があります..

char[] modes = new char[] { 'm', 'q', 'h', 'y' };

ここで、ユーザーに文字を入力するオプションを提供したいと考えています。配列に存在する場合modesは、必要なことを行います。そのために私が使った...

//to take a character as input
mode = input.next().charAt(0);
//now to check if the array contains the character
boolean ifExists = Arrays.asList(modes).contains(mode);

しかし、不思議なことにifExists戻ってきますfalse

  1. どこで間違っているのでしょうか?
  2. これが悪い方法である場合は、方法を提案してください。
4

5 に答える 5

3

私はそれがオートボクシングだと思います - contains() メソッドはプリミティブではなくオブジェクトを取ります。

char の代わりに Character を使用すると、次のように動作します。

    Character[] modes = new Character[] { 'm', 'q', 'h', 'y' };

    //to take a character as input
    Character mode = "q123".charAt(0);
    //now to check if the array contains the character
    boolean ifExists = Arrays.asList(modes).contains(mode);

true を返します

于 2013-01-23T16:37:06.997 に答える
3

Arrays.asList() メソッドは、期待どおりの char のリストではなく、char[] のリストを返しています。次のように Arrays.binarySort() メソッドを使用することをお勧めします。

    char[] modes = new char[] { 'm', 'q', 'h', 'y' };

    char mode = 'q';

    //now to check if the array contains the character
    int index = Arrays.binarySearch(modes, mode);
    boolean ifExists = index != -1;
    System.out.print(ifExists);
于 2013-01-23T16:40:30.723 に答える
1

文字列に変換してから、 containsを実行するだけです。

new String(modes).contains("" + mode);

これは、プリミティブ配列に対して true または false を返す必要があります

于 2013-01-23T16:43:54.673 に答える
1

私はあなたのコードに問題を見つけなかったので、これを試してみました.

この種のコレクションを使用すると、デフォルトで利用可能なメソッドを使用して多くの操作を実行できます...

List<Character> l = new ArrayList<Character>();
l.add('a');
l.add('b');
l.add('c');
System.out.println(l.contains('a'));
于 2013-01-23T16:41:19.100 に答える