• ベストアンサー

エラー(互換性の無い型)

はじめましてsunoftaiyoと申します。このカテゴリでは初めての質問です。 これからどうぞよろしく御願いします。 早速なのですが tokuten.txtという30個の数字が羅列されたテキストを読み込み、合計点と平均点を表示するプログラムについてなのですが import java.io.*; public class yomikomi03 { public static void main(String[] args) throws IOException { try{ BufferedReader br = new BufferedReader(new FileReader("tokuten.txt")); String tokuten[] = new String[29]; String t[] = new String[29]; int a=0; for(int i=0;i<29;i++) { tokuten[i] = br.readLine(); t[i] = Integer.parseInt(tokuten[i]); } for(int j=1;j<29;j++) { a = a + tokuten[j]; } int b = a/30; System.out.println("合計点は" + a); System.out.println("平均点は" + b); } catch(FileNotFoundException e) { System.out.println("ファイルが見つかりません。"); } } } というソースでコンパイルすると yomikomi03.java:14: 互換性のない型 検出値 : int 期待値 : java.lang.String t[i] = Integer.parseInt(tokuten[i]); ^ yomikomi03.java:18: 互換性のない型 検出値 : java.lang.String 期待値 : int a = a + tokuten[j]; ^ とでます。どのように対処すればよいでしょう?

質問者が選んだベストアンサー

  • ベストアンサー
  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.3

まず、エラーメッセージで「互換性がない」と言ってますので、 何かと何かの間の話(代入、変換など)と想像できます。 で、それは yomikomi03.java の14行目だということがわかります。 さらに、 検出値 : int 期待値 : java.lang.String とあるので、int型とString型で互換性がないと言っているのだとわかります。 14行目は t[i] = Integer.parseInt(tokuten[i]); ですが、t[i]の宣言を見てみると、 String t[] = new String[29]; となっていてString型です。 また、Integer.parseIntは、ドキュメントを見るとint型を返すことがわかります。 http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/Integer.html#parseInt(java.lang.String) つまり、intをStringに代入しようとしたために出たエラーなわけです。 もう一つの、 yomikomi03.java:18: 互換性のない型 に関しても、tokutenがString型で、 「intとStringを足した結果をintに代入」 しようとしたために発生しています。 以上のことを考えてプログラムを見直せば、自力で修正出来ると思います。

sunoftaiyo
質問者

お礼

ご丁寧な回答ありがとうございます。 無事コンパイルすることができました。 最終的なソースはこうなりました。 import java.io.*; public class yomikomi03 { public static void main(String[] args) throws IOException { try{ BufferedReader br = new BufferedReader(new FileReader("tokuten.txt")); String tokuten[] = new String[30]; int t[] = new int[30]; int a=0; for(int i=0;i<30;i++) { tokuten[i] = br.readLine(); t[i] = Integer.parseInt(tokuten[i]); a = a + t[i]; } double b = a/30; System.out.println("合計点は" + a); System.out.println("平均点は" + b); } catch(FileNotFoundException e) { System.out.println("ファイルが見つかりません。"); } } } そして実行結果が。 合計点は2226 平均点は74.0 となりました。 この質問にご回答くださった ngsvx様、himajin100000様ありがとうございました。

その他の回答 (2)

回答No.2

/* #1です。最後コピペするとき閉じ括弧3つをコピペしそびれた。*/ } } }

回答No.1

import java.io.*; public class yomikomi03 { public static void main(String[] args) throws IOException { try{ BufferedReader br = new BufferedReader(new FileReader("tokuten.txt")); String tokuten[] = new String[29]; Integer t[] = new Integer[29]; int a=0; for(int i=0;i<29;i++) { tokuten[i] = br.readLine(); t[i] = Integer.parseInt(tokuten[i]); /* 戻り値はInteger */ } for(int j=1;j<29;j++) { a = a + t[j]; } int b = a/30; /* 30で割った時、整数にならなかったときの扱いはこれでいいのね? a = 110とか */ System.out.println("合計点は" + Integer.toString(a)); System.out.println("平均点は" + Integer.toString(b)); } catch(FileNotFoundException e) { System.out.println("ファイルが見つかりません。");

sunoftaiyo
質問者

お礼

早速のご指摘ありがとうございます。 すぐに訂正させていただきました。

関連するQ&A

専門家に質問してみよう