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

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

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

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

2635閲覧

配列 から一部変数を切り抜いて和を出すためのソースコード

xtaka02

総合スコア5

Java

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2019/12/03 16:58

編集2019/12/03 17:02

ハンズオン型のプログラミング学習をしているのですが、答えのソースコードの理論がわからないです。なぜこう組めるのか教えていただけますか?

課題:奇数、偶数をそれぞれピックアップしてそれぞれの和を出してください

自分のソースコードの解釈は太字にしました。

class Main {
public static void main(String[] args) {
// 変数numbersに、与えられた数字の配列を代入してください
int[] numbers = {1, 4, 6, 9, 13, 16};

int oddSum = 0; int evenSum = 0; // for文を用いて、配列numbersの偶数の和と奇数の和を求めてください for (int number : numbers) {                        ** */  ←配列から変数をピックアップ** if (number % 2 == 0) {                           **//  ←もし2で割り切れるなら** evenSum += number;                           ** //  ←evenSumに変数を足す**   } else {                                  **// ←そうでなければ** oddSum += number;                         ** //  ←oddSumに変数を足す** 

//このソースコードだとevenSum、oddSumで分岐をしたとしても関数をすべて足してしまうと思うのですがどこでnumberが偶数、奇数と変化しているのでしょうか?
}
}

// ---- 拡張for文を用いない場合 ---- // for (int i = 0; i < numbers.length; i++) { // if (numbers[i] % 2 == 0) { // evenSum += numbers[i]; // } else { // oddSum += numbers[i]; // } // } System.out.println("奇数の和は" + oddSum + "です"); System.out.println("偶数の和は" + evenSum + "です");

}
}

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

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

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

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

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

kei344

2019/12/03 17:00

質問タグに使用しているプログラミング言語も追加してください。
xtaka02

2019/12/03 17:03

ご指摘ありがとうございます。
swordone

2019/12/03 18:05 編集

> このソースコードだとevenSum、oddSumで分岐をしたとしても関数をすべて足してしまうと思うのですが 何をどう解釈したらそうなるのかわからん、というか何を言っているのかわからん
jimbe

2019/12/03 18:06

xtaka02 さんのご理解では, evenSum, oddSum はそれぞれ幾つになるとお考えでしょうか.
guest

回答2

0

java

1for (int number : numbers) { 2 if (number % 2 == 0) { 3 evenSum += number; 4 } else { 5 oddSum += number; 6 } 7}

ループして要素を取り出す対象の変数が配列の場合は、上のように書くとjavaコンパイラーが以下のようなバイトコードを生成する(.classファイルを作成する)と理解すれば良いと思います。

java

1for (int i = 0; i < numbers.length ; i++) { 2 int number = numbers[i]; 3 if (number % 2 == 0) { 4 evenSum += number; 5 } else { 6 oddSum += number; 7 } 8}

このうちの最初の1行は配列の要素を最初から最後まで取り出して処理する場合には決まり切った形なので、これを簡略化した文法(シンタックス・シュガーなどと表現されることもあります)をJava SE 5で追加しました。
その文法の中では添字で取り出した各要素を代入する変数を for (int number : のような形で宣言することで添字を使った配列の参照をしないで済むようにしてあります。
こうすることで、コードを書く量が減るのと共に、添字の変数の取り扱いに起因するバグ(ループ中に値を変えてしまうなど)を未然に防ぐ効果もあります。

投稿2019/12/04 04:22

ironya

総合スコア454

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

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

0

ベストアンサー

拡張for文におけるnumberは、拡張じゃないfor文におけるnumbers[i]と同じ値を示しています。
for (int number : numbers)というのは、numbernumbersの要素を一つずつ代入して{}内の計算を行うことを意味しています。
ということは、例えばnumber=4の時、if (number % 2 == 0)は通るのでevenSum += number;が実行されますが、こちらを通った時点でoddSum += number;は実行されないため、evenSumのみ変化しoddSumは変化しないことになります。

投稿2019/12/03 19:39

FoyLand

総合スコア72

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問