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

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

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

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

Java

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

Q&A

解決済

1回答

632閲覧

配列の編集について(for文を使って)

tama_beginner

総合スコア6

多次元配列

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

Java

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

0グッド

0クリップ

投稿2019/08/29 11:21

編集2019/08/30 04:49

前提・実現したいこと

多次元配列を使って、国語、数学、英語の合計、平均点を出すプログラムを作っています。下記のプログラムを改良し、機能を追加したいと思っています。

追加する項目としては、
・個人の各教科の成績を全員分(A~E)足し合わせて、更に成績の総合計を出す
・各教科の平均点を全教科足し合わせて科目数で割り、更に成績の総平均を出す
この2つです。

発生している問題

・計算式の中身
・計算式をどこに挿入するか
が分かりません。

該当のソースコード

java

1import java.util.Scanner; 2 3import java.util.Scanner; 4 5import java.util.Scanner; 6 7class Seiseki3 { 8 public static void main(String[] args) { 9 Scanner stdIn = new Scanner(System.in); 10 11 double[][] test = new double[6][4]; 12 int i, j; 13 14 for (i = 0; i < 5; i++) 15 { 16 System.out.print((i + 1) + "番目の人の国語の点数は?"); 17 test[i][0] = stdIn.nextDouble(); 18 } 19 for (i = 0; i < 5; i++) 20 { 21 System.out.print((i + 1) + "番目の人の数学の点数は?"); 22 test[i][1] = stdIn.nextDouble(); 23 } 24 for (i = 0; i < 5; i++) 25 { 26 System.out.print((i + 1) + "番目の人の英語の点数は?"); 27 test[i][2] = stdIn.nextDouble(); 28 } 29 System.out.println(); 30 31 for (i = 0; i < 5; i++) 32 { 33 test[i][3] = 0.0; 34 for (j = 0; j < 3; j = j + 1) 35 { 36 test[i][3] = test[i][3] + test[i][j]; 37 } 38 } 39 40 // 追加事項 始め 41 for (j = 0; j < 2; j++) 42 { 43 test[5][3] = 0.0; 44 for (i = 0; i < 5; i = i + 1) 45 { 46 test[5][3] = test[5][3] + test[i][j]; 47 } 48 } 49 // 追加事項 終わり 50 51 for (i = 0; i < 5; i = i + 1) 52 { 53 System.out.println((i + 1) + "番目の人の合計点は" + test[i][3] + "点です。"); 54 } 55 56 // 追加事項 始め 57 System.out.println("総合計点は" + test[5][3] + "点です。"); 58 // 追加事項 終わり 59 60 for (j = 0; j < 3; j = j + 1) 61 { 62 test[5][j] = 0.0; 63 for (i = 0; i < 5; i++) 64 { 65 test[5][j] = test[5][j] + test[i][j]; 66 } 67 test[5][j] = test[5][j] / 5.0; 68 } 69 70 // 追加事項 始め 71 for (j = 0; j < 3; j = j + 1) 72 { 73 test[5][j] = 0.0; 74 for (i = 0; i < 2; i++) 75 { 76 test[5][4] = test[5][4] + test[i][j]; 77 } 78 test[5][4] = test[5][4] / 3.0; 79 } 80 // 追加事項 終わり 81 82 System.out.println("国語の平均点は" + test[5][0] + "点です。"); 83 System.out.println("数学の平均点は" + test[5][1] + "点です。"); 84 System.out.println("英語の平均点は" + test[5][2] + "点です。"); 85 86 // 追加事項 始め 87 System.out.println("成績の総平均は" + test[5][4] + "点です。"); 88 // 追加事項 終わり 89 } 90}

試したこと

思い当たる場所に計算式の挿入をしてみたが、上手く行かなかった。

補足情報

出力結果としては、
1番目の人の合計点は80.0点です。
2番目の人の合計点は50.0点です。
3番目の人の合計点は60.0点です。
4番目の人の合計点は70.0点です。
5番目の人の合計点は50.0点です。
5番目の人の合計点は50.0点です。
成績の総合計は360.0点です。←追加事項
国語の平均点は44.0点です。
数学の平均点は40.0点です。
英語の平均点は40.0点です。
成績の総平均は41.3点です。←追加事項

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

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

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

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

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

m.ts10806

2019/08/29 11:25

インデントはもう少しきちんとつけられたほうが読みやすいですし、 問題の切り分けもしやすくなります。手元のコードを調整してください。 ※EclipseなどIDEのコードフォーマット機能を利用するよう強くすすめます
jimbe

2019/08/29 12:26 編集

「計算式の挿入をしてみた」コードと, どう「上手く行かなかった」のかを, ご質問を編集して追加して頂けますでしょうか. また, 結果はどう表示したかったのでしょうか.
dice142

2019/08/29 12:29 編集

「黄色のセルに」とのことですが、提示されているプログラムでは 各人の点数と合計は画像のような形式で出力されていません。 > ・計算式の構造 > ・計算式をどこに挿入するか > が分かりません。 ということですので、黄色のセル云々は関係ないということですか? また、 > ・計算式の構造 は既に質問文にあると思いますが。 >> 個人の各教科の成績を全員分(A~E)足し合わせて >> 各教科の平均点を全教科足し合わせて科目数で割り
guest

回答1

0

ベストアンサー

単純に
・全員の3教科の合計点の合計
・各教科の平均点から全教科の平均点
が求めたいということでしょうか。

java

1 double sum = 0; 2 double ave = 0; 3 for(i=0;i<5;i++) { 4 sum += test[i][3]; 5 } 6 7 for(i=0;i<3;i++) { 8 ave += test[5][i]; 9 } 10 ave /= 3;

これだけの話では?
他に合わせてdoubleにしましたが、合計点は別にintでいい気もする。

以下追記

java

1 for (j = 0; j < 3; j = j + 1) 2 { 3 test[5][j] = 0.0; 4 for (i = 0; i < 2; i++) 5 { 6 test[5][4] = test[5][4] + test[i][j]; 7 } 8 test[5][4] = test[5][4] / 3.0; 9 }

実行時エラーです。
定義している配列の長さは[6][4]なので、test[5][4]は存在しません。
最初に提示していた表のように、全教科の平均点は図からはみ出るような位置づけになるため
そもそも配列に入れる意味がないと思うんですが。
どうしても入れたいなら、配列を宣言する時点で[6][5]にしてはどうでしょう。
[0][5]~[4][5]までが無駄になるのでオススメできませんが。

もういっちょ追記

java

1 for (j = 0; j < 2; j++) 2 { 3 test[5][3] = 0.0; 4 for (i = 0; i < 5; i = i + 1) 5 { 6 test[5][3] = test[5][3] + test[i][j]; 7 } 8 }

これ、何を求めているかお分かりでしょうか。
現在のコードで最終的にtest[5][3]に入るのは**全員の「英語の合計点」**です。
なぜその結果になるかは明白なので、一度よく見なおしてみると良いかと。

投稿2019/08/30 04:39

編集2019/08/30 05:14
tetutetu

総合スコア419

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

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

tama_beginner

2019/08/30 05:22

ありがとうございます。変数を追加してそれに合計点、平均点を入れるという事が出来ていませんでした。 また、値を代入する場所が間違っていることを教えていただきありがとうございます。
tetutetu

2019/08/30 05:23 編集

コメント削除
tetutetu

2019/08/30 05:31

質問者様の環境が分からないので何ともですが コンソールに「IndexOutOfBoundsException」と出てたのではないでしょうか。 これは配列の範囲外(存在しない場所)に何かしらの処理をしようとした際に出るエラーなので 「配列の何かがおかしいんだな」程度にでも理解できるようになれば、問題が発生した際に自身で解決しやすくなります。 エラーメッセージを読めるようにしましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問