プロが教える店舗&オフィスのセキュリティ対策術

はじめまして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];
^

とでます。どのように対処すればよいでしょう?

A 回答 (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/ …

つまり、intをStringに代入しようとしたために出たエラーなわけです。


もう一つの、
yomikomi03.java:18: 互換性のない型
に関しても、tokutenがString型で、
「intとStringを足した結果をintに代入」
しようとしたために発生しています。

以上のことを考えてプログラムを見直せば、自力で修正出来ると思います。
    • good
    • 0
この回答へのお礼

ご丁寧な回答ありがとうございます。
無事コンパイルすることができました。
最終的なソースはこうなりました。

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様ありがとうございました。

お礼日時:2007/02/01 11:31

/* #1です。

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

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("ファイルが見つかりません。");
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/02/01 11:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!