Code Fix

初級

incompatible types の原因と直し方

型が合わない代入で出ます。String / int / char / double の相互変換ルールを整理します。

エラーメッセージの読み方

Main.java:3: error: incompatible types: String cannot be converted to int
Main.java
ファイル名
3
行番号 — javacが異常に気づいた位置。原因の行とは限りません
error
種別 — コンパイルエラー。実行まで到達しません
incompatible types: String cannot be converted to int
内容 — javacが期待していたもの、または見つけられなかったもの

このエラーが出る典型パターン

パターン1

 1  public class Main {
 2      public static void main(String[] args) {
 3          int     name = "Taiyo";
               ^
 4          System.out.println(name);
 5      }
 6  }
Main.java:3: error: incompatible types: String cannot be converted to int

ダブルクォートで囲んだ値はString型です。charは 'a' のようにシングルクォート1文字だけを扱います。

直し方: intString にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  public class Main {
 2      public static void main(String[] args) {
 3          int age = "20";
                        ^
 4          System.out.println(age);
 5      }
 6  }
Main.java:3: error: incompatible types: String cannot be converted to int

"20" は文字列で、数値の20とは別物です。文字列を数値にするには Integer.parseInt() が要ります。

直し方: "20"20 にします。

この問題を解いてみる →

パターン3

 1  public class Main {
 2      public static void main(String[] args) {
 3          int price = 9.8         ;
                              ^
 4          System.out.println(price);
 5      }
 6  }
Main.java:3: error: incompatible types: possible lossy conversion from double to int

小数リテラルはdouble型です。intに入れると情報が失われるため、明示的なキャストを要求されます。

直し方: 9.8(int) 9.8 にします。

この問題を解いてみる →

パターン4

 1  public class Main {
 2      public static void main(String[] args) {
 3          boolean isReady = 1     ;
                                 ^
 4          System.out.println(isReady);
 5      }
 6  }
Main.java:3: error: incompatible types: int cannot be converted to boolean

Javaのbooleanは0/1と互換性がありません。真偽値は必ずtrue/falseで表します。

直し方: 1true にします。

この問題を解いてみる →

パターン5

 1  public class Main {
 2      static void printDouble(int n) {
 3          System.out.println(n * 2);
 4      }
 5      public static void main(String[] args) {
 6          printDouble("5");
                         ^
 7      }
 8  }
Main.java:6: error: incompatible types: String cannot be converted to int

引数にもその型と一致する値が必要です。数値の見た目でも文字列は数値として渡せません。

直し方: "5"5 にします。

この問題を解いてみる →

よくある誤解

「数字に見えるからint」ではありません。"20" は見た目が数字でもStringです。型は見た目ではなく書き方で決まります。

まとめ

incompatible typesは初級でつまずきやすい項目です。上の5パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)