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

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

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

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

Q&A

解決済

6回答

1353閲覧

配列

kisaragizinzin7

総合スコア90

Java

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

0グッド

0クリップ

投稿2015/11/10 01:01

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ページで確認できます。

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

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

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

guest

回答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
rysh

総合スコア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

anonymouskawa

総合スコア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

maisumakun

総合スコア145121

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

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

kisaragizinzin7

2015/11/10 07:00

みなさんたくさんの回答ありがとうございました^^ 1つのことをやるにしても数通りのやり方があるんですね! すみませんが、BAは私的にわかりやすく、速やかに回答してくださったmaisumakunさんにさせていただきます。 みなさんありがとうございました!
guest

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

otftrough

総合スコア476

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

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

anonymouskawa

2015/11/10 03:42

この考えもありだなーと思っていたのですが、 「これ、1の時って限定されちゃうなー」というのと 「Javaだと結局ループしてたさないといけないし記述として楽にはならないか」というメリットの少なさがありました。 質問の条件で見るなら、この考え方はありですよね。
otftrough

2015/11/10 07:19

1でないなら、 int n; if(sum == num.length * n) でいいんじゃない? ループの中にさらにループとかif文を入れる必要もないし、 ループの内容も1行ですむし、そこまで面倒ではないと思う。 それに、配列の内容をチェックするには必ずループが必要になるから、何度も使うなら自分でメソッドを作っておけばいいと思う。 たとえば、 private static boolean check(int[] ch, int n){ int sum = 0; for(int i =0; i < ch.length; i ++) sum += ch[i]; if(sum == ch.length * n) return true; return false; } if(check(num, 5)){ } else{ } とか。
guest

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

tk_9

総合スコア50

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

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

tk_9

2015/11/10 01:16

おお、maisumakunさんとほぼ同じ回答になっていましたw flagの中身はbool型なので==trueは省略できましたね。参考にしてください。
guest

0

booleanを1つ用意しておいて(初期値はどっちでもいい)、for文で要素をチェックし、1以外の要素が見つかったらbooleanを初期値と逆にセットしてbreak。
forを抜けたときのbooleanで処理を分岐すればいい。

投稿2015/11/10 01:06

swordone

総合スコア20649

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問