int num[] = new int[3];
という配列があるとして、
配列の要素が全部1ならAの処理、それ以外ならBの処理というようにするにはどうしたらよいのでしょうか?
コード int num[] = new int[3]; if(num [0] == 1 && num[1] == 1 && num[2] == 1){ //Aの処理 } else{ //Bの処理 }
これだと要素が100個あった場合にプログラムを書くのが大変なので簡単なのはないでしょうか?
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
0
java8での書き方はこうです。
java
1 int num[] = new int[3]; 2 if (Arrays.stream(num).allMatch(i -> i == 1)) { 3 // 全て1 4 } else { 5 // 1以外を含む 6 }
上の書き方が理解できなければこちらでもいいです。
java
1 int num[] = new int[3]; 2 boolean ret = true; 3 for (int i : num) { 4 if (i != 1) { 5 ret = false; 6 break; 7 } 8 } 9 if (ret) { 10 // 全て1 11 } else { 12 // 1以外を含む 13 }
投稿2015/11/10 01:15
編集2015/11/10 01:17総合スコア874
0
回答はたくさんあると思うので、考え方で。
int num[] = new int[n];
という文があるとき、未来永劫nの値が100であるという確信がない限り、
nは可変であると考えないといけないのです。
nが可変である時、
if(num [0] == 1 && num[1] == 1 && num[2] == 1){
はかけません。
(例え100で固定でもnum [99]まで書く気力もありません。)
なので、
num.length(配列の長さ、つまりn)を使って
グルグル処理をまわす事になるのです。
for(i = 0; i < num.length ; ++i) {
と書くのです。ちなみに配列は0から始まって長さ-1で終わるので、 i <= num.lengthってしないで下さいね。
maisumakunさんとtk_9さんはわかりやすくこっちで書いています。
ryshさんの書き方はとても合理的です。
注意点は、前者はjava8、後者はjava1.5以降じゃないと使えません。
for (int i : num) {
これは拡張for文といって、
numの値を取ってきてはint iに入れてくれる文です。
今回のような場合であれば拡張for文でも良いのですが、欠点は「処理中、何番目かわからない」があります。
例えば「もし、1じゃないものが含まれている場合、その場所を表示したい」とかだと別に変数を持たないといけないので
それならfor(i = 0; i < num.length ; ++i) でも…というような、
まぁ、適材適所です。
java8からラムダ式が使えるようになりました。
現在java7はEOLになっているはずなので、今から作るのであればラムダ式でも良いでしょう。
Stream APIの主なメソッドと処理結果のOptionalクラスの使い方 (1/4)
かいつまんで言えば、java7以前で面倒だったfor文の書き方がちょっと省略できるよ、ってことです。
どの書き方を選んでも結果は同じですし、考え方も同じです。
投稿2015/11/10 01:50
総合スコア856
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
こんな時にも、ループを使いましょう、
java
1boolean all_1 = true; 2int i; 3 4for(i=0;i<num.length;++i){ 5 //1つでも1でないとわかれば、残りは実行しなくていい 6 if(num[i] != 1){ 7 all_1=false; 8 break; 9 } 10} 11 12if(all_1) { 13 //すべて1だった時の処理 14}else{ 15 //1でないものがあった場合 16}
投稿2015/11/10 01:08
総合スコア145121
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
数学的に(?)考えると、
全て1なら、全部を足した数が配列数になると思うんです。
java
1int sum = 0; 2for(int i = 0; i < num.length; i ++) sum += num[i]; 3if(sum == num.length){ 4 5} else{ 6 7}
まあ、私はfor文よりwhile文の方が好きなんだけど。
投稿2015/11/10 03:35
総合スコア476
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/10 03:42
2015/11/10 07:19
0
javaはほとんど書いてないので文法間違ってたらごめんなさい。numの配列には値が入っていると仮定しています。
java
1boolean flag = true; 2for (int i = 0; i < num.length; i++) { 3 // ひとつでも1でなければflagをfalseに 4 if (num[i] != 1) { 5 flag = false; 6 break; 7 } 8} 9 10if (flag == true) { 11 //Aの処理 12} else { 13 //Bの処理 14}
投稿2015/11/10 01:13
総合スコア50
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。