5

サイズがランダムに選択された文字列のサイズに依存するブール配列があります。

だから私はこのようなものを持っています:

boolean[] foundLetterArray = new boolean[selectedWord.length()];

プログラムが進行するにつれて、この特定のブール配列には、配列内の各要素の真の値が入力されます。配列のすべての要素が真になるとすぐにステートメントを出力したいだけです。だから私は試しました:

if(foundLetterArray[selectedWord.length()]==true){
    System.out.println("You have reached the end");
}

これにより、範囲外の例外エラーが発生します。メソッドも試しcontains()ましたが、配列内の1つの要素がtrueであってもループが終了します。配列のすべての要素を反復処理する for ループが必要ですか? その中でテスト条件を設定するにはどうすればよいですか?

4

8 に答える 8

12

拡張された for loopを使用すると、配列を簡単に反復処理できます。インデックスやサイズの計算は必要ありません。

private static boolean allTrue (boolean[] values) {
    for (boolean value : values) {
        if (!value)
            return false;
    }
    return true;
}
于 2013-09-05T09:20:18.120 に答える
4

これには Java 8 ワンライナーがあります。

boolean allTrue(boolean[] arr) {
    return IntStream.range(0, arr.length).allMatch(i -> arr[i]);
}
于 2015-11-12T00:45:32.383 に答える
1

boolean[] foundLetterArray = new boolean[5]; abow 配列のメモリ割り当ては次のようになります

      foundLetterArray[0],foundLetterArray[1],foundLetterArray[2],foundLetterArray[3],foundLetterArray[4] 

配列インデックスは 0 から始まり、合計メモリ カウントは 5 で、最後の配列インデックスは 4 です。

存在しない foundLetterArray[5] であるインデックス 5 を取得しようとしています。それがあなたが得ている理由ですArrayIndexOutofBoundsException

   if(foundLetterArray[selectedWord.length()-1]==true){
      System.out.println("You have reached the end");
   }
于 2013-09-05T08:53:56.693 に答える
0

これを行う

public boolean allTrue(boolean[] array) {
    for (boolean b : array) {
        if (!b) {
           return false;
        }
    }
    return true;
}

配列のすべての要素が特定の条件を満たしているかどうかを「1 行」で知る方法はありません (ループを処理するライブラリはありますが、条件を記述する必要があります)。array[x] をクエリすると、その配列の x 番目の項目についてのみ通知されるため、質問についてはすべての項目を確認する必要があります。

また、他の人が指摘したように、配列のインデックスは 0 ベースなので、最初の要素は array[0] にあり、最後の要素は array[array.length() - 1] にあります。

私の例では、for-each として知られる別のループ構造を使用しています。これは、配列の内容を変更する必要がなく、読み取るだけでよい場合に適しています。インデックスをいじるのを避けます。

于 2013-09-05T09:14:56.937 に答える
0

配列の最後の要素に対してのみチェックを行います(そして、間違っています。上記の理由が説明されています)。

配列に真の値のみが含まれているかどうかを取得するには、それらすべてをチェックする必要があります。

boolean allAreTrue = true;
for (boolean val : foundLetterArray) {
  allAreTrue = allAreTrue && val;
}

// この行の allAreTrue には、すべての値が true の場合は true が含まれ、少なくとも 1 つの "false" がある場合は false が含まれます

于 2013-09-05T09:18:02.860 に答える
0

Java の配列は次から始まりindex 0、最後のインデックスは常に[array.length()-1]

をチェックしてfoundLetterArray[selectedWord.length()]いると、バインドされた例外から配列が返されますfoundLetterArray[selectedWord.length()-1]

お気に入り:

if(foundLetterArray[selectedWord.length()-1]){
System.out.println("You have reached the end");
}
于 2013-09-05T08:57:02.063 に答える
0

ほとんどのプログラミング言語と同様に、Java のインデックスは 0 から始まります。つまり、n 個の要素を持つ配列内の個々の要素のインデックスは 0、1、2、...、n-1 です。配列の最後の要素は、常にインデックス array.length - 1 にあります。

于 2013-09-05T08:57:23.457 に答える