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

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

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

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

Q&A

解決済

3回答

1559閲覧

Javaのエラーが解決できません。

ryoga4

総合スコア1

Java

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

0グッド

0クリップ

投稿2021/08/06 12:30

csvファイルを読み取り、成績をつけるプログラムを作成しています。コンパイルはできるのですが、以下のエラーが出ます。
引用テキスト
94行目に原因があるようですが、解決できませんでした。
何が原因なのでしょうか?
コードは以下のとおりです。

java

1import java.util.*; 2import java.io.*; 3 4public class GradeChecker2{ 5 void run(String[] args)throws IOException{ 6 HashMap<Integer, Double> grade = new HashMap<>(); 7 8 ArrayList<Integer> assignments = new ArrayList<>(); 9 10 ArrayList<Integer> miniexam = new ArrayList<>(); 11 12 this.initializeExam(grade, args[0]); 13 this.initializeAssignments(assignments, args[1]); 14 this.initializeMiniexam(miniexam, args[2]); 15 this.juageAndPrint(grade, assignments, miniexam); 16 } 17 void juageAndPrint(HashMap<Integer, Double> grade, 18 ArrayList<Integer> assignments, ArrayList<Integer> miniexam){ 19 String rank = " "; 20 double record = 0; 21 Integer i = 0;//計算用のカウンタ変数 22 23 for(Map.Entry<Integer, Double> entry:grade.entrySet()){ 24 record = (70 * entry.getValue()) / 100 + (25 * assignments.get(i)) / 60 25 + (5 * miniexam.get(i)); 26 27 rank = juage(record, entry.getValue()); 28 29 System.out.printf("%d, %.3f, %.0f, %.0f, %s%n", entry.getKey(), 30 entry.getValue(),assignments.get(i), miniexam.get(i), rank); 31 32 i++; 33 } 34 } 35 String juage(double record, double value){ 36 String rank = " "; 37 if(record >= 90){ 38 rank = "秀"; 39 } 40 else if(record >= 80){ 41 rank = "優"; 42 } 43 else if(record >= 70){ 44 rank = "良"; 45 } 46 else if(record >= 60){ 47 rank = "可"; 48 } 49 else if(record < 60 && record > 0){ 50 rank = "不可"; 51 } 52 else if(value == 0.0){ 53 rank = "K"; 54 } 55 return rank; 56 } 57 void initializeExam(HashMap<Integer, Double> grade, String args) 58 throws IOException{ 59 BufferedReader inExam = new BufferedReader(new FileReader(new File(args))); 60 61 Integer num = 1; 62 63 String line; 64 while((line = inExam.readLine()) != null) { 65 String[] items = line.split(","); 66 Integer key = Integer.valueOf(items[0]); 67 Double value = Double.valueOf(items[1]); 68 69 if(!Objects.equals(num, key)){ 70 for( ; num < key; num++){ 71 grade.put(num, 0.000 ); 72 } 73 } 74 else{ 75 grade.put(key, value); 76 } 77 num++; 78 } 79 inExam.close(); 80 } 81 void initializeAssignments(ArrayList<Integer> assignments, String args) 82 throws IOException{ 83 BufferedReader inAssignments = new BufferedReader(new FileReader(new File(args))); 84 85 Integer total = 0; 86 Integer num = 0; //課題の点数を入れる 87 88 String line; 89 while((line = inAssignments.readLine()) != null){ 90 String[] items = line.split(","); 91 for(Integer i = 1; i <= 6; i++){ 92 93 if(Objects.equals(items[i], null)){ 94 num = 0; 95 total += num; 96 } 97 else{ 98 num = Integer.valueOf(items[i]); 99 total += num; 100 } 101 } 102 assignments.add(total); 103 } 104 inAssignments.close(); 105 } 106 void initializeMiniexam(ArrayList<Integer> miniexam, String args) 107 throws IOException{ 108 BufferedReader inMiniexam = new BufferedReader(new FileReader(new File(args))); 109 Integer num = 1, count = 0, result = 0, ID = 0; 110 111 String line; 112 while((line = inMiniexam.readLine()) != null){ 113 String[] items = line.split(","); 114 115 if(!Objects.equals(num, items[0])){ 116 ID = Integer.valueOf(items[0]); 117 for( ; num < ID; num++){ 118 miniexam.add(0); 119 } 120 } 121 else{ 122 for(Integer i = 1; i <= 14; i++){//出席率を算出 123 if(Objects.equals(items[i], null)){ 124 count++; 125 } 126 } 127 result = count / 14; 128 miniexam.add(result); 129 } 130 num++; 131 count = 0; 132 } inMiniexam.close(); 133 } 134 135 public static void main(String[] args)throws IOException{ 136 GradeChecker2 checker = new GradeChecker2(); 137 checker.run(args); 138 } 139}

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

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

エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

maisumakun

2021/08/06 12:40

「94行目」はどこですか?
ryoga4

2021/08/06 12:44

すみません。 for(Integer i = 1; i <= 6; i++){ の下の if(Objects.equals(items[i], null)) です。
jimbe

2021/08/06 13:54

折角テンプレートをお使いなのですから、テンプレートに合わせてご質問を編集しては如何でしょう。
jimbe

2021/08/06 14:47

このプログラム、この修正だけでは済まなそうですが…。
guest

回答3

0

データの問題じゃないでしょうか。

splitの挙動を確認してみてはどうでしょうか。

java

1String[] list = {"1,2" , "1,,,,2,3", "1,2,,,,,", "1,,2,,3", "1,2,","1,,,,,,",""}; 2for(String s : list) { 3 System.out.println(s + " -> split:" + s.split(",").length); 4}

java8 String#split(int)

投稿2021/08/07 00:46

momon-ga

総合スコア4820

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

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

ryoga4

2021/08/07 03:14

ご回答ありがとうございます。csvファイルは読み込めるようになったのですが、String型のnullをInteger型の0に変換するのが上手くいっていないのだと思います。
shiketa

2021/08/07 06:37

ちがいます。そのまえ、`if(Objects.equals(items[i], null)){`の `items[i]` に問題があるのです。
shiketa

2021/08/07 06:46 編集

String#split()のドキュメントに明記されてはいないが、String#split()メソッドが返す配列にnullが含まれていたことはいまだかつて、経験ない。
guest

0

ベストアンサー

成績の合計を求めるという事は、「国語」「英語」「数学」「理科」「社会」の5教科では?

とすると、90行目付近の

for(Integer i = 1; i <= 6; i++){

は、

for(Integer i = 1; i < 6; i++){

または

for(Integer i = 1; i <= 5; i++){

が正しいかと思います。

ちなみに、その上の

while((line = inAssignments.readLine()) != null){

の直後に、total=0をしてやる必要があると思います。

投稿2021/08/06 20:34

TetsujiMiwa

総合スコア1124

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

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

ryoga4

2021/08/06 22:03

ご回答ありがとうございます。ご指摘通りにしてみたのですが、エラーがなくなりませんでした。
TetsujiMiwa

2021/08/06 22:12

CSVファイルは正しく読み込めていますか?String[] items = line.split(",");の直前で、system.out.println(line);で中身を表示して、想定通りの読み込みができているか確認してみてください。
ryoga4

2021/08/07 00:37

ご指摘のとおり、csvファイルを上手く読み込めていないようです。
jimbe

2021/08/07 01:56 編集

CSV ファイル(の最初数行だけでも)をご提示頂いたほうが早いのではないでしょうか。 (ファイルの最初にヘッダコメントでもあるのでしょうか。)
guest

0

94行目に原因があるようですが、解決できませんでした。

java

1 String[] items = line.split(","); 2 for(Integer i = 1; i <= 6; i++){ 3 4 if(Objects.equals(items[i], null)){

何が原因なのでしょうか?

itemsの要素数は 6 7 である、と自信をもった実装をしているので、コードの問題ではなくデータの問題でしょう。

# GradeChecker2という名前とはウラハラにチェックがずいぶんと荒いようにおもえますけど。

投稿2021/08/06 13:18

編集2021/08/06 14:04
shiketa

総合スコア3990

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

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

javahack

2021/08/06 13:26

このfor文の書き方だとitemsの要素数が6でもOUTでは?
shiketa

2021/08/06 14:01

たしかに。`7`の決め打ちですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問