5日目:型を意識しよう!

Java超・入門物語
ぽっちゃん
ぽっちゃん

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

しがない先生
しがない先生

またか!

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

ぽっちゃん
ぽっちゃん

それが、、、

前回「変数」を習い、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型(整数型)だよ」などとプログラマーの間とかではよく言うよ。

ぽっちゃん
ぽっちゃん

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

しがない先生
しがない先生

ま、とにかく今日は一件落着として、続きは明日にしようか。

明日は「6日目:消費税込みで何円?」というテーマでお話ししていくよ。

ぜひお楽しみに。

ぽっちゃん
ぽっちゃん

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

コメント

タイトルとURLをコピーしました