
ウワァァぁゎっっっっっっっ!!!!!

またか!
今度は一体どうしたんだ?

それが、、、
前回「変数」を習い、3日目には「計算」の仕方を習ったので、

今回変数を使った足し算をしようと思ってプログラムを書いて実行してみたら、
見事にエラーが出るんです。。。

プログラムは、、、どれどれ。。。
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
// Your code here!
String one = 1;
String two = 2;
System.out.println(one + two);
}
}Main.java:7: error: incompatible types: int cannot be converted to String
String one = 1;
^
Main.java:8: error: incompatible types: int cannot be converted to String
String two = 2;
^
2 errors
なるほど。
「1 + 2 = 3」を計算しようとしてくれているんだね。

そうなんです。
それでしがない先生が「3日目:計算をしよう!」のレッスンで言ったとおり、「”1″ + “2”」だと「”1″」と「”2″」がくっついちゃって「”12″」という文字になってしまうから、

今回しっかりとそれを守って変数には「1」と「2」という数字を入れているんですが、見事にエラーになっちゃって。。。

お、よく文字と数字の違いを覚えていてくれたね。

実はこのエラーはJavaの醍醐味のようなもので、
「変数の型と値の型が違うから」という理由で起こってしまうエラーなんだ。

変数の型と値の型が違う。。。?

何を言っているのかサッパリわからないです。。。

まぁそうだね。
では今回は1つレベルを上げてみるということで、Javaが出してくれた「エラーメッセージ」を読み取ってエラーを解決していくことにしよう。

まさか、、、
エラーメッセージってこれのことですか???
Main.java:7: error: incompatible types: int cannot be converted to String
String one = 1;
^
Main.java:8: error: incompatible types: int cannot be converted to String
String two = 2;
^
2 errors
もはや解読不可能な暗号と化していて、見るだけで頭が痛くなるのですが。。。

そんなことはない。
プログラミングにおけるエラーメッセージは、エラーを解決するための1番の助け舟となる要素なんだよ。

ヘぇ〜。
1番挫折するポイントなのに実は1番救ってくれているって何だか感慨深いですね。。。

なんだその格言、、、。
とりあえず1つずつ読み解いてみようか。
一番最初は「Main.java:7」と書いているね。
これは「7行目にエラーが出ましたよ」とエラーが出た行を知らせてくれているんだ。

ほう、7行目というと、、、
String one = 1;
あ〜ここか。
確かに僕もここで間違っていると思っていたんだよね。

では次に「error: incompatible types: int cannot be converted to String」という英語が表示されていることを確認しよう。
これはエラーの内容に当たる本文なんだけど、一見すごく難しそうなことが書かれているようで、実は日本語に訳してみたら「あ〜なるほど、そんなことか」と思うようなメッセージが多いんだ。

ということはGoogle先生をお借りして「Google 翻訳」とかでこのメッセージを日本語に変換しちゃえばいいってことですね?

そういうことだね。

よし!
翻訳してパパッと解決しちゃうぞ〜!!ってあれ???

「エラー: 互換性のない型: int を String に変換できません」。。。

やっぱりわかりマセ〜〜〜ん!!!

落ち着いて。
これをもっと噛み砕くと、「数字を文字に変えられない」と言っているんだ。

ん?
数字を文字に変えられない、、、?
ということは感覚的には「1」を「”1″」にできないみたいな感じですか???

おーいいね、ズバリそういうこと。
ここでもう一度エラーが出た7行目のプログラムを見てみよう。
String one = 1;
ここでは変数の準備をしているんだけど、前回習ったとおりここでは「oneというラベルの付いた箱の中に1という数字を入れている」んだよね。

まさにそうです。

そこまで良かったんだけど、ここでは「String」という文字が付いているよね。

これはどういうことかというと、「この変数には文字しか入れられない」という制約を付けているんだ。

え、、、?
ということはこの「one」という変数にはダブルクオーテーション(”)の付いた「”こんにちは”」や「”1″」とかしか入れられないってことですか?

まさにそのとおり。
そして文字以外の値、ぽっちゃんの例だと「1」とかの数字を入れてしまうと、制約違反という形でJavaはエラーを出してくるんだ。

なるほど。
じゃあどうすればいいんですか?

答えはシンプルで「変数に入れられる値の種類を文字から数字に変えればいい」んだ。
今は「String」という文字が入れられる状態になっているけど、ここで「int」に変えて数字が入れられる状態に変えちゃえばいいってことさ。

ということは、、、
こういうことですか?
int one = 1;
正解!

じゃあもしかして8行目も同じようにしていたから修正して、、、
できた!これはイケるんじゃないかな???
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
// Your code here!
int one = 1;
int two = 2;
System.out.println(one + two);
}
}
お、素晴らしいね!
では実行してみよう。
3
やったー!!
今度はエラーが出ずにちゃんと「3」が表示された!

それはよかった。
こんな感じでJavaでは「変数の型(種類)」を意識しないといけないんだ。

変数の前に「String」が付くと「その変数には文字しか入れられない」、
変数の前に「int」が付くと「その変数には数字しか入れられない」ということですね。

そう。
そして少し難しいことを言うと、「この変数は、String型(文字列型)の変数だね」とか「この変数の型はint型(整数型)だよ」などとプログラマーの間とかではよく言うよ。

確かに慣れればそっちの方が言いやすいし伝わりやすいかも。。。


しがない先生、今日もありがとうございました。


コメント