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

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

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

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

Q&A

解決済

2回答

2391閲覧

java 最高得点の科目を表示するメソッドがうまく機能しない

gknjnjtnj

総合スコア7

Java

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

0グッド

0クリップ

投稿2021/05/08 09:02

編集2021/05/08 09:34

前提・実現したいこと

javaで最高得点の科目名を表示のメソッドを作っています。
最高得点を求めたメソッドを利用して作っています。

発生している問題・エラーメッセージ

なぜか返り値が初期化されたままで、for文とif文の処理がうまくいかず、先頭の国語としか表示されません。

該当のソースコード

java

1 2public class Score { 3 String name; 4 int[] subjects = new int[5]; 5 6 public int getJapanese(){ 7 return subjects[0]; 8 } 9 10 public int getMathmatics(){ 11 return subjects[1]; 12 } 13 14 public int getScience(){ 15 return subjects[2]; 16 } 17 18 public int getSocialStudies(){ 19 return subjects[3]; 20 } 21 22 public int getEnglish(){ 23 return subjects[4]; 24 } 25 26 public void setJapanese(int value){ 27 subjects[0] = value; 28 } 29 30 public void setMaMathmatics(int value){ 31 subjects[1] = value; 32 } 33 34 public void setScience(int value){ 35 subjects[2] = value; 36 } 37 38 public void setSocialStudies(int value){ 39 subjects[3] = value; 40 } 41 42 public void setEnglish(int value){ 43 subjects[4] = value; 44 } 45 46 public int getHighScore(){ //最高得点を求める 47 int max=subjects[0]; 48 for(int high : subjects){ 49 if(max < high){ 50 max = high; 51 } 52 } 53 return max; 54 } 55 56 String getHighScoreSubject(){ //最も点数の高い科目を表示 57 String[] maxsub = {"国語","数学","理科","社会","英語"}; 58 String st = maxsub[0]; 59 for(int j=0; j==subjects.length; j++) { 60 if (getHighScore() == subjects[j]) { 61 st = String.join(",",maxsub[j]); 62 } 63 } 64 return st; 65 } 66 67 68 void getprintInfo(){ //結果の出力 69 System.out.println("氏名:" + name); 70 System.out.println("国語:" + subjects[0] + "点"); 71 System.out.println("数学:" + subjects[1] + "点"); 72 System.out.println("理科:" + subjects[2] + "点"); 73 System.out.println("社会:" + subjects[3] + "点"); 74 System.out.println("英語:" + subjects[4] + "点"); 75 System.out.println("最も点数が高い科目:" + getMaxSubject() + getHighScore() + "点"); 76 }

試したこと

どこが間違っているのかわかりません。

補足情報(FW/ツールのバージョンなど)

氏名や点数の入力は別のクラスで行っています。
最高得点の科目を表示する部分以外はちゃんと実行できます。

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

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

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

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

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

K_3578

2021/05/08 09:03

とりあえずteratailではソースコードはMarkDown方式でコードブロック化してご提示ください。 ヘルプに書いてありますが、書き方が分からない場合は下記質問の回答も参考にしてください。 https://teratail.com/questions/238564
K_3578

2021/05/08 09:12

>編集を受けて 質問者さんが書いている「,,,」はカンマです。 コードブロック化する際に必要なこれ「```」はバッククォートです。 フツーのキーボードならShift+「@」のキーで打てます。 めんどかったらコードを全選択して<code>って書いてるところを押せば早いっす。
gknjnjtnj

2021/05/08 09:13

すいません直りました。 手間をかけて申し訳ありません。
K_3578

2021/05/08 09:19

別に暇なときに指摘してるだけなのでお気になさらず。 多分コード部分的に切り取られてるので極力全部コピペで貼った方が良いっすよ。
guest

回答2

0

ベストアンサー

Java

1for(int i=0; i==subjects.length; i++) {

ループの条件式が間違っているように思えます。
i==subjects.lengthではなく、i<subjects.lengthではないでしょうか。

投稿2021/05/08 09:28

pg-tips

総合スコア57

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

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

gknjnjtnj

2021/05/08 09:39

ありがとうございます!うまく動作しました! しかし、最高得点が同じだった場合(国語と数学が同率など)、数学しか表示されません。 二つとも表示する方法を教えていただいてもよろしいでしょうか?
gknjnjtnj

2021/05/08 10:20

自己解決しました
guest

0

java

1if (getHighScore() == subjects[j]) {

jじゃなくてiでは

投稿2021/05/08 09:07

編集2021/05/08 09:07
jamjam3

総合スコア165

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

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

gknjnjtnj

2021/05/08 09:16

すいません。そこは他のメソッドと混同したときの名残です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問