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

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

新規登録して質問してみよう
ただいま回答率
85.35%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Java

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Q&A

解決済

1回答

3832閲覧

Javaの多次元配列計算方法(合計、平均)

yuutao

総合スコア2

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Java

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

0グッド

0クリップ

投稿2021/07/02 12:54

編集2021/07/02 13:16

java

1コード 2String[] name = {"伊藤", "山田", "佐藤", "吉田", "上野"}; 3 int total = 0; 4 int average = 0; 5 6 System.out.println("名前 国語 算数 理科 社会 英語 合計 平均"); 7 8 int[][] a = new int[5][5]; 9 for (int i = 0; i <5; i++) { 10 System.out.print(name[i]); 11 for (int j = 0; j < 5; j++) { 12 13 a[i][j] = (int) (Math.random() * 101); 14 15 16 System.out.printf("%10s", a[i][j] + " "); 17 18 19 total += a[i][j]; 20 average = total / 5; 21 22 23 24 } 25 System.out.print(" " + total); 26 System.out.printf("%10s"," " + average); 27 28 System.out.println(); 29 30 }

名前 国語 算数 理科 社会 英語 合計 平均
伊藤 21 68 65 41 76
山田 90 29 43 27 64
佐藤 88 47 68 17 98
吉田 41 21 44 73 36
上野 25 87 14 57 5

合計
平均

一人の5教科の合計と各教科の合計が出せないです。
どうしたらいいですか?

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

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

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

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

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

BeatStar

2021/07/02 13:13

コードは"<code>"または"<コード>"のボタンを押して出てくるやつの中に書きましょう。 そのままだとインデントが無視されて読みづらいです。
y_waiwai

2021/07/02 13:51

どうなるんでしょうか。
guest

回答1

0

ベストアンサー

プログラミングは「こう書けばいい」……ではないです。

プログラムは魔法でもなんでもなく、人間が現実世界でやっていることを逐一指示されながら処理しているだけの代物である』です。

つまり、『現実世界でならどうするか』です。

今回の場合を見てみましょうか。

まずプログラミング云々は置いておきましょう。

名前 国語 算数 理科 社会 英語 合計 平均 伊藤 21 68 65 41 76 山田 90 29 43 27 64 佐藤 88 47 68 17 98 吉田 41 21 44 73 36 上野 25 87 14 57 5 合計 平均

ですね。

何かに似ていませんか?

そう、Excelのあの表です。行と列があるやつです。

伊藤, 山田, 佐藤... とあるあれを行、名前, 国語, 算数, 理科……とあるあれを列と見たとき、
どう見えますか?

問題を簡単にするために、数字の範囲だけ(すでにわかっている範囲だけ)をExcelの表と考えてみてください。

Excelは A1 とかですが、二次元配列をイメージするためにも arr[行][列] とし、行も列も0から始まるとします。

そうすると、arr[0][0] には 伊藤さんの国語の点数が入っているはずです。

まずはExcelの方眼用紙(?)に数字を埋めていくイメージで設定していきます。

今回知りたいのはなんでしょうか?

『1人分の五教科の合計』と『各教科の合計』ですね。

では、『1人分の五教科の合計』とはなんでしょうか。

そう、

1人分の五教科の合計 = 国語の点数 + 算数の点数 + 理科の点数 + ... + 英語の点数

ですね。簡単に言えば、1人分の5教科の点数すべての合計ですね。

では、伊藤さんの国語の点数は? そう、(配列をarrとすると) arr[0][0] ですね。

伊藤さんの数学の点数は? そう arr[0][1] ですね。

伊藤さんの理科の点数は? そう arr[0][2] ですね。

つまり、

合計 = arr[0][0] + arr[0][1] + arr[0][2] + arr[0][3] + arr[0][4]

ですね。

それで、数字に着目してみてください。

行番号は変動一切なしですが、列が +1 して行っています。

では、これを計算してみてください。

伊藤さんのは、

合計 = 21 + 68 + 65 + 41 + 76 = 271

ですね。(私は計算が苦手なので計算ミスしている可能性もある。それに関してはご容赦を)

で、計算するとき、一気に計算しますか?

私はすぐにはできないので、算数や数学の問題として出されたら、

1. ノートを用意する(計算用紙でもいいけど) 2. まず21 + 68を計算する 3. (2)での答えをノートに一時的な答えとして記録しておく(これを記録Xとする) 4. 次に記録X に +65 をする 5. 記録X を更新する 6. 記録X に +41 をする 7. 記録Xを更新する ...

のように、一時的にどこかに書いておく。

そうすると、

21 + 68 以外は常に 『記録X + <追加する数字>』となっています。

でも、21 のときも、記録X の初期値を 0 と考えれば、

記録X = 0
記録X + 21
0 + 21 = 21

となり、ちゃんと21になるため、記録Xの初期値を0と仮定すれば最初の21も
記録X + <追加する数字>
という規則性が成り立つ。

つまり、

■ 記録Xの初期値 = 0 とする
■ 記録X = 記録X + <追加する数字>

という規則性が出てくる。

ということで、『1人分の五教科の合計』はわかりましたね。

上記では伊藤さんのみですが、行を降りていけば他の方々も出来ます。

次に、『各教科の合計』とはなんでしょうか。

国語を例にとると、

合計 = 伊藤さんの点数 + 山田さんの点数 + 佐藤さんの点数 + ... + 上野さんの点数

ですね。

伊藤さんの国語の点数はどこにありますか?

そう、arr[0][0] ですね。

山田さんのは?

そう、arr[1][0] ですね。

と考えると、

合計 = arr[0][0] + arr[1][0] + arr[2][0] + arr[3][0] + arr[4][0]

ですね。

これも同様に数字に着目して下さい。

行番号は +1 していっているが、列は完全固定ですね。

(教科が変われば列も変わるが、今は国語だけの話なので)

……と言う風に考えてみてください。

そして出てきた規則性から、ノートなりホワイトボードなりにその規則性を用いて書いてみてください。

それでうまくいくならこれを実装します。

JavaならJavaの書き方とかに書き下させばいいだけです。

後はデバッグやテストをすれば完了です。

投稿2021/07/02 13:56

BeatStar

総合スコア4962

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

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

yuutao

2021/07/02 16:02

すごくわかりやすい説明ありがとうございます!!
BeatStar

2021/07/02 16:44

ちなみに今回の初期値は計算式が足し算のため、0にしていますが、 掛け算の場合は1のように工夫しないといけません。 つまり、初期値はその都度考えないといけないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問