こんにちは。ECF Tech ブログ担当 Michiharu.Tです。 Javaプログラミング向け練習問題、今回のテーマは「リテラル・型」です。 Javaは通常、値や変数の型を厳密に定義する言語です(※Java10からは型推論の機能も導入されています)。 ということで、Javaの理解に欠かせない型を意識した問題を作ってみました。 一般的なJavaの学習順序に沿ったテーマの一覧(※随時追加)は、こちらのリンクよりご確認頂けます。
Javaプログラミング
Javaのトピックスです。主に初心者向けにプログラミング学習ネタを提供していきます。
解説動画
2022/12/17 解説動画を掲載しました。
問題
Q001
実行結果の通りとなるように、4つの変数の右辺を記入してください。
提供コード
public class Quiz001 { public static void main(String[] args) { //実行結果のとおりになるように、4つの変数の右辺を入れてください。 int i = ; double d = ; char c = ; String s = ; //変数の内容を表示 System.out.println(i); System.out.println(d); System.out.println(c); System.out.println(s); } }
実行結果
5 3.14 A Hello
public class Quiz001 { public static void main(String[] args) { //実行結果のとおりになるように、4つの変数の右辺を入れてください。 int i = 5; double d = 3.14; char c = 'A'; String s = "Hello"; System.out.println(i); System.out.println(d); System.out.println(c); System.out.println(s); } }
Q002
問題
提供コードの①~④を、下の説明に基づいて埋めてください。
- ①数値で20を記入
- ②代入が成立するように、変数の型を記入
- ③変数yearを用いて、実行結果のように表示
- ④代入が成立するように、変数の型を記入
提供コード
public class Quiz002 { public static void main(String[] args) { System.out.println("私は" + ① + "歳です。"); ② year = 2020; ③ ④ box = "円周率は" + 3.14; System.out.println(box); } }
実行結果
私は20歳です。 今年は2020年です。 円周率は3.14
public class Quiz002 { public static void main(String[] args) { System.out.println("私は" + 20 + "歳です。"); int year = 2020; System.out.println("今年は" + year + "年です。"); String box = "円周率は" + 3.14; System.out.println(box); } }
Q003
問題
提供コードの①~③に、適切な型を記入してください。
提供コード
public class Quiz003 { public static void main(String[] args) { ① a = 123456789012L; ② b = 3.141592653589; ③ c = "Good " + "Morning"; System.out.println(a); System.out.println(b); System.out.println(c); } }
実行結果
123456789012 3.141592653589 Good Morning
public class Quiz003 { public static void main(String[] args) { long a = 123456789012L; double b = 3.141592653589; String c = "Good " + "Morning"; System.out.println(a); System.out.println(b); System.out.println(c); } }
Q004
問題
コンパイルした時に、下のコンパイル結果となるように 提供コードを変更してください。
提供コード
※コンパイルが正常終了する状態になっています。
public class Quiz004 { public static void main(String[] args) { char a = 'A'; double b = 3.14; } }
コンパイル結果
(※コンパイル時の環境は、jdk13を用いています。)
Quiz004.java:3: エラー: 不適合な型: charをStringに変換できません: Quiz004.java:4: エラー: 不適合な型: 精度が失われる可能性があるdoubleからfloatへの変換 エラー2個
public class Quiz004 { public static void main(String[] args) { String a = 'A'; float b = 3.14; } }
Q005
問題
コンパイル時のエラーメッセージをヒントに、変数value1、value2の宣言部分を適切な型に直し、実行結果を得てください。提供コード
public class Quiz005{ public static void main(String[] args){ char value1 = "B"; float value2 = 3.14; System.out.println(value1); System.out.println(value2); } }
コンパイル結果
(※コンパイル時の環境は、jdk15を用いています。)Quiz005.java:3: エラー: 不適合な型: Stringをcharに変換できません: char value1 = "B"; ^ Quiz005.java:4: エラー: 不適合な型: 精度が失われる可能性があるdoubleからfloatへの変換 float value2 = 3.14; ^ エラー2個
実行結果
B 3.14
public class Quiz005{ public static void main(String[] args){ String value1 = "B"; double value2 = 3.14; System.out.println(value1); System.out.println(value2); } }
解答
Q001
public class Quiz001 { public static void main(String[] args) { //実行結果のとおりになるように、4つの変数の右辺を入れてください。 int i = 5; double d = 3.14; char c = 'A'; String s = "Hello"; System.out.println(i); System.out.println(d); System.out.println(c); System.out.println(s); } }
Q002
public class Quiz002 { public static void main(String[] args) { System.out.println("私は" + 20 + "歳です。"); int year = 2020; System.out.println("今年は" + year + "年です。"); String box = "円周率は" + 3.14; System.out.println(box); } }
解説
文字列と基本データ型(int
double
boolean
など)を結合して得られたデータは文字列(String
)型とみなされます。
Q003
public class Quiz003 { public static void main(String[] args) { long a = 123456789012L; double b = 3.141592653589; String c = "Good " + "Morning"; System.out.println(a); System.out.println(b); System.out.println(c); } }
解説
123456789012
はint型では表現できない数値のため、L
をつける必要があります。L
をつけたリテラルはlong型とみなされます。3.141592653589
はdouble型で表現しなければなりません。Q004
public class Quiz004 { public static void main(String[] args) { String a = 'A'; float b = 3.14; } }
解説
- 下のメッセージはchar型の値
'A'
がString型の変数に代入できないことを示しています。不適合な型: charをStringに変換できません:
- 下のメッセージはdouble型の値を、double型より表現力の低いfloat型に代入し用としていることを表すメッセージです。
不適合な型: 精度が失われる可能性があるdoubleからfloatへの変換
Q005
public class Quiz005{ public static void main(String[] args){ String value1 = "B"; double value2 = 3.14; System.out.println(value1); System.out.println(value2); } }
解説
- 下のメッセージはString型の値
"B"
がchar型の変数に代入できないことを示しています。不適合な型: Stringをcharに変換できません:
- 下のメッセージはdouble型の値を、double型より表現力の低いfloat型に代入し用としていることを表すメッセージです。
不適合な型: 精度が失われる可能性があるdoubleからfloatへの変換
豆知識
ここでちょっとだけ、Java10から使用できるようになった型推論についてご紹介したいと思います。 使い方を簡単に説明しますと、変数宣言の時に型名を書くかわりにvar
を用います。下にサンプルプログラムを示します。
サンプルプログラム
public class Topic001 { public static void main(String[] args) { var a = 3.14; System.out.println(a); } }
実行結果
3.14ですが、型の考えがなくなったわけではありません。例えば次のようなプログラムはエラーとなります。
public class Topic001 { public static void main(String[] args) { var a = 3.14; int b = a; //doubleをintに代入しようとしてエラー } }
おわりに
いかがでしたでしょうか。Javaでプログラミングを書く上で型は欠かせないものです。少しでもその理解の手助けになっていれば幸いです。ひきつづき単元ごとに問題を徐々に増やしていきたいと思っていますので、よろしければぜひご活用ください。合同会社イー・シー・エフでは、子ども向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。
ECFエデュケーション