• ベストアンサー

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

はじめまして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]; ^ とでます。どのように対処すればよいでしょう?

  • Java
  • 回答数3
  • ありがとう数2

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

  • ベストアンサー
  • 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

  • Java言語のプログラムをC言語にする場合

    次の2つのJava言語のプログラムをC言語にしたいのですが、C言語でプログラムを書いたことがありません。C言語にする場合はどう書けばいいのでしょうか? import java.io.*; public class Sort { public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.println("整数値を入力してください"); String line = reader.readLine(); int a = Integer.parseInt(line); String line2 = reader.readLine(); int b = Integer.parseInt(line2); String line3 = reader.readLine(); int c = Integer.parseInt(line3); String line4 = reader.readLine(); int d = Integer.parseInt(line4); int[] data = {a, b, c, d}; for (int i = 0; i< data.length - 1 ; i++) { for (int j = i + 1; j< data.length; j++) { if(data[i] > data[j]) { int e = data[i]; data[i] = data[j]; data[j] = e; } } } System.out.println("昇順に並べ替えると、"); for (int i = 0; i< data.length; i++) { System.out.print(data[i] + " "); } System.out.println("です。"); } catch (IOException e){ System.out.println(e); } catch (NumberFormatException e) { System.out.println("数式の形式が正しくありません。"); } } } import java.io.*; public class Yakusu { public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.println("2つの整数値を入力してください"); System.out.print("整数A : "); String line = reader.readLine(); int a = Integer.parseInt(line); System.out.print("整数B : "); String line2 = reader.readLine(); int b = Integer.parseInt(line2); if(a%b == 0){ System.out.println("BはAの約数です"); } else { System.out.println("BはAの約数ではありません"); } } catch (IOException e){ System.out.println(e); } catch (NumberFormatException e) { System.out.println("数式の形式が正しくありません。"); } } }

  • コンパイル後のエラー。

    こんにちは、質問があります。 下のプログラムを組みました。 コンパイルには成功しましたが、実行することができません。 import java.io.*; public class Gyouretu { public static void main(String[] args) { BufferedReader reader = new BufferedReader( new InputStreamReader(System.in), 1); try{ System.out.println("行列数を入力"); String line = reader.readLine(); int n = Integer.parseInt(line); int a[][] = new int[n][n]; int b[][] = new int[n][n]; int c[][] = new int[n][n]; int i,j,k; for ( i = 0; i < n; i++){ for ( j = 0; j < n; j++){ c[i][j]=0; for ( k = 0; k < n; k++){ c[i][j] += a[i][k] * b[k][j]; System.out.print(c); System.out.print(i); System.out.print(j); } } } }catch (IOException e){ System.out.println("end"); } } } 行列の計算をするプログラムなのですが、コンパイル後に行列数(何行何列か?)を入力するとこんなエラーが出ます。 「'2' は、内部コマンドまたは外部コマンド、  操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 なぜなのか、どうしてもわかりません。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 九九を横に表示する。

    入力した整数までの九九を 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 以下略 のように表示したいのですが 私の作ったプログラムだと縦に表示されてしまいます。 1 2 3 4 5 6 7 8 9 のように。(-"-;A ... プログラムは以下の通りです。 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class q07quiz07 { /** * @param args */ public static void main(String[] args)throws IOException { // TODO 自動生成されたメソッド・スタブ System.out.println("整数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); int i , j; i = 1; while(i <= num){ j = 1; while(j <= 9){ System.out.println(i*j+ " "); j++; } System.out.println(); i++; } } } 回答よろしくお願いします。

    • ベストアンサー
    • Java
  • 構文がエラーになる

    Exception in thread"main"java.lang.NoClassDefFoundError という文章でエラーになります。 import java.io.*; class Sample34 { public static void main (String args[])throws IOException { System.out.println("整数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int res = Integer.parseInt(str); if(res == 1){ System.out.println("1が入力されました。"); } else if(res == 2){ System.out.println("2が入力されました。"); } else{ System.out.println("1か2を入力してください。"); } } }

  • javaについて・・・

    このように出力されるプログラムを考えています ↓ 受験者人数を入力してください 3 3人分の点数を入力してください 50 80 20 1人目の点数は50です 2人目の点数は80です 3人目の点数は20です 最高点は80です っという感じのプログラムを考えています。 そしていまここまでプログラムを書いたのはいいのですが 感じんの最高点が表示されません・・・ import java.io.*; class test{ public static void main(String[] args) throws IOException{ System.out.println("テストの受験者数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str =br.readLine(); int num = Integer.parseInt(str); int test[] = new int[num]; int max=0; System.out.println(test.length +"人の点数を入力してください"); for(int i=0; i<num; i++){ String str1 = br.readLine(); test[i] = Integer.parseInt(str1); } for(int i=0; j<num; i++){ System.out.println((i+1)+"番目の人の点数は"+ test[i]+"です。"); if(test[i]>max){ max=test[i]; } } System.out.println("最高点は" +max+ "です。"); } } どこをどのように直せば最高点が表示されるようになるでしょうか? ご指摘おねがいします。

  • コンパイル時のエラーについて

    Java超初心者の者です。 下記のコードどこか間違っていますか? class Sample4 { public static void main(String args[]) throws IOException { System.out.println("いくつまでの合計を求めますか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); int sum = 0; for(int i=1; i<=num; i++){ sum += i; } System.out.println("1から" + num + "までの合計は"      + sum + "です。"); } } テキスト通りに入力したつもりなのに何度確認して入力し直しても、 『'class'または'interface'がありません。』というエラーが 出てしまうのですが・・・ 色々ネットで検索して調べたのですが、分らなくて。

    • ベストアンサー
    • Java
  • クラスのフィールドの値を配列に代入する方法

    フィールドの値を代入したいのですが、 java.lang.ArrayIndexOutOfBoundsException というエラーが出てしまい、どうすればいいのかわかりません。 どのように対処すればいいのでしょうか? class Car { String carname; int height; int width; int length; } class public static void main(String[] args) throw IOException { Car car[]; car = new Car[5]; System.out.println("車の情報を入力してください。"); BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in); for(int i=0; i<5; i++){ car[i] = new Car(); System.out.println(i+1 + "台目の車の名前を入力してください。"); String str1 = br1.readLine(); System.out.println("車の高さを入力してください。"); String str2 = br1.readLine(); System.out.println("車の幅を入力してください。"); String str3 = br1.readLine(); System.out.println("車の長さを入力してください。"); String str4 = br1.readLine(); int h1 = Integer.parseInt(str2); int w1 = Integer.parseInt(str3); int l1 = Integer.parseInt(str4); car[i].carname = str1; car[i].height = h1; car[i].weith =w1; car[i].length =l1; } for(int i=0; i<5; i++){ int c_h[] = new int[5]; c_h[i] = car[i].height; } } よろしくお願いします。

    • ベストアンサー
    • Java
  • エラーが出て困っています。

    先ほど質問したものです。 今度のエラーはb,tが初期化されていないとのことです。 import java.io.*; class kadai3{ public static void main (String args[])throws IOException{ int k; double cos,sin,a,b,t,c; String a2,b2,t2; BufferedReader a1 =new BufferedReader(new InputStreamReader(System.in)); BufferedReader b1 =new BufferedReader(new InputStreamReader(System.in)); BufferedReader t1 =new BufferedReader(new InputStreamReader(System.in)); System.out.println("y=ax+bをt*n度回転させたときの直線を求めましょう。"); System.out.println("傾きaの値を入力してください。"); a2=a1.readLine(); a=Double.parseDouble(a2); System.out.println("y切片の値bを入力してください。"); a2=a1.readLine(); a=Double.parseDouble(a2); System.out.println("回転させる角度t度を入力してください。"); t2=t1.readLine(); a=Double.parseDouble(t2); for(k=0; k<=50; k++){ sin=Math.sin(k*t*3.141592653582/180.0); cos=Math.cos(k*t*3.141592653582/180.0); a=(sin+a*cos)/(cos-a*sin); b=b*sin*(sin+a*cos)/(cos-a*sin)+b*cos; c=cos-a*sin; if (c<=0.00001){ System.out.println("傾きが大きすぎます。プログラムを終了してください。"); } else if (c>0.00001){ a=a; b=b; t=t; } System.out.println("角度は"); System.out.println(k*t); System.out.println("直線はy="); System.out.println(a); System.out.println("x+"); System.out.println(b); } } } このような質問をするのは失礼だと思うのですが、エラーが出て困っています。 どこが行けないのでしょう? 回答お願いします。

    • ベストアンサー
    • Java
  • 誰か教えてください!

    javaのプログラムですが import java.io.*; import java.util.*; public class Suudoku{ Suudoku(int[] data){ public static void main(String[] args);{ int[] data = new int[81]; if(args.length!=1){ System.err.println("need 1 argument"); System.exit(1); } BufferedReader br; try{ br = new BufferedReader(new FileReader(args[0])); for(int i=0;i<9;i++){ String tmp = br.readLine(); StringTokenizer stn = new StringTokenizer(tmp," ",false); for(int j=0;j<9;j++){ data[i*9+j]=Integer.parseInt(stn.nextToken()); } } }catch(Exception e){ System.err.println(""+e); System.exit(1); } new Suudoku(data); int board[][] = {{ 6, 0, 1, 0, 7, 0, 2, 0, 8 }, { 0, 7, 0, 6, 0, 8, 0, 9, 0 }, { 9, 0, 0, 0, 3, 0, 0, 0, 7 }, { 0, 8, 0, 3, 0, 4, 0, 1, 0 }, { 4, 0, 2, 0, 0, 0, 9, 0, 5 }, { 0, 6, 0, 1, 0, 9, 0, 2, 0 }, { 1, 0, 0, 0, 8, 0, 0, 0, 2 }, { 0, 2, 0, 7, 0, 6, 0, 5, 0 }, { 3, 0, 7, 0, 9, 0, 6, 0, 1 }}; } } } の後はどうようにしたら良いか教えて下さい。

  • Javaのプログラムで・・・

    Javaのプログラムで1~20までの整数乱数を実行後に指定回数だけ発生させ、そのうち何%が奇数であったかを表示するプログラムを作成中です。 乱数を発生させるところまでは行ったのですがここからどのように計算していくのかわかりません。 以下が作成したものですがアドバイスお願いします。 import java.io.*; public class Rand { public static void main(String args[]) throws IOException { System.out.print("発生させる乱数の回数は?"); BufferedReader br= new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num= Integer.parseInt(str); for(int i=1;i<=num;i++){ int a=(int)(20*Math.random()+1); System.out.println(a); } for(int a=1; a<=;a++){ if(a%2==1); System.out.println("発生した乱数の"++"%が奇数です。"); } } }

専門家に質問してみよう