質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

5回答

4885閲覧

配列について

daichanman123

総合スコア32

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/11/18 05:20

例えば
boolean A[] = new boolean[]{false, true, false};
のような配列があったとして
配列Aが全てtrueの場合Bという処理を行うというようなプログラムを作るときは、

コード if(A[0] == true && A[1] == true && A[2] == true){ //Bを行う }

になると思うんですが、Aの要素が100個あった場合このやり方だと
A[0]からA[99]まで書かないといけなくなるので、他に簡単なやり方はないのでしょうか?

if(A[] == true){
}
これだとエラーが出るのですが、こんな感じでできる命令があれば教えていただきたいです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

for-inで回すのが手っ取り早いでしょう。

java

1boolean allTrue = true; 2for(boolean b : A) { 3 if(b) continue; 4 allTrue = false; 5 break; 6} 7if(allTrue) { 8 // 処理 9}

投稿2016/11/18 05:26

編集2016/11/18 05:27
maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Javaの勉強がてら。
いろいろ調べた挙句、Booleanでの回答ですが。

contains

java

1Boolean[] array = {true, true, false}; 2if (!Arrays.asList(array).contains(false)) { 3 System.out.println("Everything is true."); 4}

falseが無ければOK、という正統派。
カラのときは真になります。

sort

java

1Boolean[] array = {true, true, false}; 2Arrays.sort(array); 3if (array[0]) { 4 System.out.println("Everything is true."); 5}

ソートして先頭の要素を調べるという、ちょっと変わり種。
booleanでもいけるかなと思いましたがダメでした。
パフォーマンスも悪そうですし、カラのときに落ちますね。

投稿2016/11/19 11:29

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

booleanでなくBooleanなら一行でできない事もないです
他の配列もラッパークラスやStringの配列であれば同じことができます

java

1import java.util.stream.*; 2 3class B{ 4 5 6 7public static void main(String [] test){ 8 9 10Boolean dat[]=new Boolean[]{true,true,true,false,true,true,true,true,true}; 11 12 13if(Stream.of(dat).allMatch(s->s==true)){ 14 15System.out.println(true);//datが全部trueであればtrueが出力される 16} 17 18 19} 20 21}

投稿2016/11/19 06:50

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KSwordOfHaste

2016/11/19 07:21

Streamを自然に使うためにWrapperのBooleanを使わないといけないという点がJavaのつらさですね。不注意にStream.ofを使うとboolean[]を一要素として扱われるので悲しい気持ちになったりします・・・ それはともかくBooleanならばこう書けるのでよいですね。ただどうせなら allMatch(s -> s) としたほうが記述上はいいかも知れません。効率上変わらないと思いますし。allMatch(どこかのクラス::identify)とかと書きたくなるような気もちょっとします。(ところでせっかくコードを提示してくださるならインデントも付けていただけるとよいと思います)
guest

0

"boolean配列の配列の中身が全てtrueか"を判定するメソッドを作るとスッキリ書けそう。

java

1public static boolean isAllTrue(boolean[] bArray){ 2 for(boolean b : bArray){ 3 if(!b) return false; 4 } 5 return true; 6}

なお、多くのboolean値を使うのであれば、booleanの配列ではなくBitSetを使うことをおすすめします。これを使えば、「すべてtrueか」という判定が、例えば今回のように最大数maxが100と決まっていれば、

java

1if (bitset.nextClearBit(0) >= max) 2```とか 3```java 4if (bitset.previousClearBit(max - 1) < 0)

の様に書けます。

投稿2016/11/18 07:36

編集2016/11/20 07:59
swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

  • 一言でいえる処理をメソッドに分ける

mausumakunさんの論理をイメージできるようになるのが最も大切な基本だと思います。ただ「全て真なら」と一言でいえることがコードに直すとすっきりしてないと感じたなら別のメソッドに分けることもよいと思います。

java

1static boolean and(boolean[] A) { ... } 2... 3if (and(A)) { // スッキリ 4 // 処理 5}
  • ループを直接書かない

Javaに限らず言語には様々なライブラリーが存在します。それらを知るほどによりすっきりとかけるようになっていきます。書いて調べてを繰り返すほどに身についていきます。

java

1// java.util.streamパッケージの例:今一つスッキリ感が足りないですが・・・ 2if (IntStream.range(0, A.length).allMatch(i -> A[i])) { 3 // 処理 4}

投稿2016/11/18 07:32

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問