【やりたいこと】:「100」 を出力したい。
【エラーがでている】:下記のコードで1箇所エラーがあります。どこが間違っているでしょう?
【ファイル名】:VariableQuestion001.java
public class VariableQuestion001 {
public static void main(String[] args){
num = 100;
System.out.println(num);
}
}
【解決方法】
3行目の変数の型の記述が抜けているので,int を追加する。
public class VariableQuestion001 {
public static void main(String[] args){
int num = 100;//型の宣言である int を追加する。
System.out.println(num);
}
}
【解説】
3行目,4行目部分のnumで赤波線が入っており,Eclipseの場合,左側に×印が表示され,そちらにマウスをあわせると
「num を変数に解決できません」といったメッセージを確認できると思います。
変数を利用する場合は,必ず型の指定が必要になりますので,データに合わせてデータの型を決めましょう。
※Javaの場合,整数型は基本的に,int を利用します。
【スッキリわかるJava入門編第2版の参考ページ】44-45ページ
【やりたいこと】:「num1 + num2 = 150」 を出力したい。
【エラーにはならないが。。。】:「num1 + num2 = 10050」と出力されてしまう。どうすればよいでしょうか?
【ファイル名】:VariableQuestion002.java
public class VariableQuestion002 {
public static void main(String[] args){
int num1 = 100;
int num2 = 50;
System.out.println("num1 + num2 = " + num1 + num2);
}
}
【解決方法】
5行目のSystem.out.printlnの引数部分の文字列連結が順番に実行されないように,計算を優先させるために()をつける。
public class VariableQuestion002 {
public static void main(String[] args){
int num1 = 100;
int num2 = 50;
System.out.println("num1 + num2 = " + (num1 + num2));// num1 + num2 の部分を()でくくります。
}
}
【解説】
5行目部分のSystem.out.printlnの中で行われる順番が左から順に文字列として連結されていたので,num1 + num2 を先に計算させるために,
()を利用して処理の順番を変更することで,計算した結果に,文字列の「num1 + num2 = 」を連結した文字列を表示するという形に変更できます。
【スッキリわかるJava入門編第2版の参考ページ】66-69ページ
【やりたいこと】:「100」 を出力したい。
【エラーがでている】:下記のコードで1箇所エラーがあります。どこが間違っているでしょう?
【ファイル名】:VariableQuestion003.java
public class VariableQuestion003 {
public static void main(String[] args) {
System.out.println(num1);
int num1 = 100;
}
}
【解決方法】
変数宣言前に変数を利用しようとしているためエラー。順番を入れ替えます。
public class VariableQuestion003 {
public static void main(String[] args) {
int num1 = 100; //num1の変数の宣言を先に行う。
System.out.println(num1);
}
}
【解説】
3行目のnumで赤波線が入っており,Eclipseの場合,左側に×印が表示され,そちらにマウスをあわせると
「num を変数に解決できません」といったメッセージを確認できると思います。
プログラムは基本的には,上から順に実行されていきますので,順番を意識しながらプログラムしましょう。
【スッキリわかるJava入門編第2版の参考ページ】42ページ
【やりたいこと】:「100」 を出力したい。
【エラーがでている】:下記のコードでエラーがあります。どこが間違っているでしょう?
【ファイル名】:VariableQuestion004.java
public class VariableQuestion004 {
public static void main(String args) {
int this = 100;
System.out.println(this);
}
}
【解決方法】
変数名でJavaの予約語である「this」を使っているので他の名前(今回はnum1)に変更します。
public class VariableQuestion004 {
public static void main(String args) {
int num1 = 100;//変数名をnum1へ変更。
System.out.println(num1);//上記処理に伴い,変数名を変更。
}
}
【解説】
3行目などのthisで赤波線が入っており,Eclipseの場合,左側に×印が表示され,そちらにマウスをあわせると
エラーメッセージを確認できると思います。
今回の場合,変数名の名前でエラーとなっており,Javaでは予約語(あらかじめ決められたキーワード)は変数名に利用できませんので,
別の名前をつけて解消しましょう。
※Javaの予約語は,下記のものがあります。
abstract, assert, boolean, break, byte, case, catch, char, class, const, continue, default, do, double, else, enum, extends,
final, finally, float, for, if, goto, implements, import, instanceof, int, interface, long, native, new, package, private, protected,
public, return, short, static, strictfp, super, switch, synchronized, this, throw, transient, try, void, volatile, while
【スッキリわかるJava入門編第2版の参考ページ】46-47ページ
【やりたいこと】:「10000000000」 を出力したい。
【エラーがでている】:下記のコードでエラーがあります。どこが間違っているでしょう?
【ファイル名】:VariableQuestion005.java
public class VariableQuestion005 {
public static void main(String args) {
int num1 = 10000000000;
System.out.println(num1);
}
}
【解決方法】
intでの範囲を超えているので,longに変更します。その際,10000000000の値をlongと明示的に示すために,10000000000Lと変更します。
public class VariableQuestion005 {
public static void main(String args) {
long num1 = 10000000000L;//①型をint から longへ変更します。②10000000000 を 10000000000L に変更します。
System.out.println(num1);
}
}
【解説】
3行目でthisで赤波線が入っており,Eclipseの場合,左側に×印が表示され,そちらにマウスをあわせると
「型 int のリテラル 10000000000 は範囲外です」といったエラーメッセージを確認できると思います。
今回の場合,整数型int の範囲(-2,147,483,648 ~ 2,147,483,647 約21億)を超えているので,long型へと切り替え,
10000000000 を 10000000000L または,10000000000l(末尾は小文字のエルです)に切り替えます。
【スッキリわかるJava入門編第2版の参考ページ】47-49ページ
【やりたいこと】:「100」 を出力したい。
【エラーがでている】:下記のコードでエラーがあります。どこが間違っているでしょう?
【ファイル名】:VariableQuestion006.java
public class VariableQuestion006 {
public static void main(String args) {
int Num1 = 100;
System.out.println(num1);
}
}
【解決方法】
Num1をnum1へ変更します。
public class VariableQuestion006 {
public static void main(String args) {
int num1 = 100;//Num1をnum1へ変更します。
System.out.println(num1);
}
}
【解説】
4行目でnum1で赤波線が入っており,Eclipseの場合,左側に×印が表示され,そちらにマウスをあわせると
「num1 を変数に解決できません」といったエラーメッセージを確認できると思います。
プログラムは大文字や小文字などを厳密に区別するため,変数名がNum1とnum1は異なるものと判別します。
変数定義ができていないと勘違いしますので,どちらかに統一するため,変数をnum1に変更します。
【スッキリわかるJava入門編第2版の参考ページ】46ページ
【やりたいこと】:「3.14」 を出力したい。
【エラーがでている】:下記のコードでエラーがあります。どこが間違っているでしょう?
【ファイル名】:VariableQuestion007.java
public class VariableQuestion007 {
public static void main(String args) {
int num1 = 3.14;
System.out.println(num1);
}
}
【解決方法】
intをdoubleへ変更します。
public class VariableQuestion007 {
public static void main(String args) {
double num1 = 3.14;//intをdoubleへ変更します。
System.out.println(num1);
}
}
【解説】
3行目で3.14で赤波線が入っており,Eclipseの場合,左側に×印が表示され,そちらにマウスをあわせると
「型の不一致: double から int には変換できません」といったエラーメッセージを確認できると思います。
データには型があり,その型に合わせて値を代入する必要があります。
型の不一致というエラーの場合は,型が間違っていないかを確認しましょう。
Javaの場合,小数を扱う場合は基本的には,doubleを使用します。
【スッキリわかるJava入門編第2版の参考ページ】47-49ページ
【やりたいこと】:「男」 を出力したい。
【エラーがでている】:下記のコードでエラーがあります。どこが間違っているでしょう?
【ファイル名】:VariableQuestion008.java
public class VariableQuestion008 {
public static void main(String args) {
char gender = "男";
System.out.println(gender);
}
}
【解決方法】
"男"を '男'に変更します。
public class VariableQuestion008 {
public static void main(String args) {
char gender = '男';// "男"を '男'に変更します。
System.out.println(gender);
}
}
【解説】
3行目で"男"で赤波線が入っており,Eclipseの場合,左側に×印が表示され,そちらにマウスをあわせると
「型の不一致: String から char には変換できません」といったエラーメッセージを確認できると思います。
1文字を格納するchar型は,シングルクォートで囲むことがルールになっています。
一方,String型の場合は,ダブルクォートで囲むことがルールになっていますので,注意しましょう。
また,型をcharからStringにする形でも問題ありません。
全角や半角での打ち間違いにも気をつけましょう。
【スッキリわかるJava入門編第2版の参考ページ】50ページ
【やりたいこと】:「Bebeit」 と出力したい。
【エラーがでている】:下記のコードでエラーがあります。どこが間違っているでしょう?
【ファイル名】:VariableQuestion009.java
public class VariableQuestion009 {
public static void main(String args) {
String name;
System.out.println(name);
}
}
【解決方法】
String name = "Bebeit" に変更します。
public class VariableQuestion009 {
public static void main(String args) {
String name = "Bebeit";// String name = "Bebeit" に変更します。
System.out.println(name);
}
}
【解説】
4行目でnameで赤波線が入っており,Eclipseの場合,左側に×印が表示され,そちらにマウスをあわせると
「ローカル変数 name が初期化されていない可能性があります」といったエラーメッセージを確認できると思います。
変数の宣言は行っているが,初期化していない場合に起こります。
初期化をしなかったことで,意図していない値が入ってしまうことが起きますので,変数を使う場合は意識して初期化をしましょう。
【スッキリわかるJava入門編第2版の参考ページ】50-51ページ
【やりたいこと】:「おはよう」を出力して改行後に「こんにちは」 と出力したい。
おはよう
こんにちは
【エラーがでている】:下記のコードでエラーがあります。どこが間違っているでしょう?
【ファイル名】:VariableQuestion010.java
public class VariableQuestion010 {
public static void main(String args) {
final String MESSAGE = "おはよう";
System.out.println(MESSAGE);
MESSAGE = "こんにちは";
System.out.println(MESSAGE);
}
}
【解決方法】
final のキーワードを削除して,変数名も通常の命名規則に合わせて,messageにします。
public class VariableQuestion010 {
public static void main(String args) {
String message = "おはよう";//①final を削除する。②MESSAGEの変数名をすべて,messageに置きなおす。
System.out.println(message);
message = "こんにちは";
System.out.println(message);
}
}
【解説】
5行目でMESSAGEで赤波線が入っており,Eclipseの場合,左側に×印が表示され,そちらにマウスをあわせると
「final のローカル変数 MESSAGE には代入できません。ブランクでなければならず、複合代入を使用することはできません」
といったエラーメッセージを確認できると思います。
final のキーワードをつける場合,定数として扱われ,値を設定した後に変更ができません。
値を変更させたくないという場合はfinal キーワードをつけるようにすることで,値の変更を防ぐことができます。
今回の場合は,値を再代入したいため,finalキーワードは不要になります。
定数の場合,すべて大文字にして,変数名が長い場合,単語の間をアンダーバー(_)を区切りとして用いて定義することが一般的です。下記は一つの例です。
final double PRICE_TAX = 0.08;
【スッキリわかるJava入門編第2版の参考ページ】53-54ページ
【やりたいこと】:「おはよう」を出力して改行後に「こんにちは」 と出力したい。
おはよう
こんにちは
【エラーはでていないが。。。】:「おはよう」の後に改行させて「こんにちは」がでない。どうすればよいでしょうか?
【ファイル名】:VariableQuestion011.java
public class VariableQuestion011 {
public static void main(String args) {
System.out.println("おはよう こんにちは");
}
}
【解決方法】
「おはよう」と「こんにちは」の間にエスケープシーケンスの「¥n」を追加する。
public class VariableQuestion011 {
public static void main(String args) {
System.out.println("おはよう\nこんにちは");//改行したい場所に \n を追加する。
}
}
【解説】
改行したい場所で「¥n」を入力することで,改行させることができます。「¥」記号とそれに続く一つの文字を組み合わせて,
二重引用符などを表現できます。
【スッキリわかるJava入門編第2版の参考ページ】63-65ページ
【やりたいこと】:下記のような出力をさせたい。
num1 + num2 = 15
【エラーはでていないが。。。】:「num1 + num2 = 5」と出力されます。どうすればよいでしょうか?
【ファイル名】:VariableQuestion012.java
public class VariableQuestion012 {
public static void main(String args) {
int num1 = 10;
int num2 = 5;
num1 =+ num2;
System.out.println("num1 + num2 = " + num1);
}
}
【解決方法】
代入演算子が逆になっているので,「+=」に変更する。
public class VariableQuestion012 {
public static void main(String args) {
int num1 = 10;
int num2 = 5;
num1 += num2;// 「 =+ 」を「 += 」に変更する。
System.out.println("num1 + num2 = " + num1);
}
}
【解説】
代入演算子はイコールが後ろに来ますので,注意して打つようにしましょう。
【スッキリわかるJava入門編第2版の参考ページ】71-72ページ
【問題】:下記のプログラムを実行すると,何が出力されるでしょうか?
【ファイル名】:VariableQuestion013.java
public class VariableQuestion013 {
public static void main(String args) {
int num1 = 10;
System.out.println(num1++ + 20);
System.out.println(num1);
System.out.println(++num1 + 20);
System.out.println(num1);
}
}
【出力結果】
下記のように出力されます。
30
11
32
12
【解説】
++は,前に置くか,後ろに置くかで処理が異なります。前に置いた場合は最初に計算をして,後に置いた場合は,あとに計算をします。
混乱してしまうことがあるので,インクリメントやデクリメントについては,単独で利用する形にしましょう。
【スッキリわかるJava入門編第2版の参考ページ】73-74ページ
【問題】:下記のプログラムを実行すると,何が出力されるでしょうか?
【ファイル名】:VariableQuestion014.java
public class VariableQuestion014 {
public static void main(String args) {
int price = 100;
double tax = 0.08;
System.out.println(price * tax);
}
}
【出力結果】
下記のように出力されます。
8.0
【解説】
int型とdouble型を計算すると,大きい型に合わせた形で型で自動変換されるため,出力時はdoubleの型で表示されるため,
8.0 という形で小数値まで出力されます。
【スッキリわかるJava入門編第2版の参考ページ】75-79, 81-82ページ
【やりたいこと】:小数値だけを出力したい。
【問題】:小数値だけを得るためにはどのようにプログラムを書くとよいでしょう?
【ファイル名】:VariableQuestion015.java
public class VariableQuestion015 {
public static void main(String args) {
double num1 = 3.5;
double decimal = ???; //???の部分を考えましょう。
System.out.println(decimal);
}
}
【解決方法】
num1の変数から整数値だけを削除する。
public class VariableQuestion015 {
public static void main(String args) {
double num1 = 3.5;
double decimal = num1 - (int) num1; //num1をintでキャストして整数値のみを取り出し,計算する。
System.out.println(decimal);
}
}
【解説】
double型をintでキャストすることで,強制的に整数値だけを取り出すことができるので,全体から整数値を削除して,
小数部分を取り出す方法をしています。
【スッキリわかるJava入門編第2版の参考ページ】79-80ページ
【やりたいこと】:「こんにちは Bebeit」と改行せずに出力をしたい
【エラーではないが。。。】:改行されて出力されます。どうしたらよいでしょうか?
【ファイル名】:VariableQuestion016.java
public class VariableQuestion016 {
public static void main(String args) {
System.out.println("こんにちは");
System.out.println("Bebeit");
}
}
【解決方法】
printlnの部分をprintへと変更する。
public class VariableQuestion016 {
public static void main(String args) {
System.out.print("こんにちは");
System.out.println("Bebeit");
}
}
【解説】
System.out.printlnを使用すると,出力した後に改行するので,System.out.printを利用します。
【スッキリわかるJava入門編第2版の参考ページ】86ページ
【やりたいこと】:変数num1 とnum2 の値を入れ替えて出力したい。
【ヒント】:もう一つ変数を用意する必要があります。
【ファイル名】:VariableQuestion017.java
public class VariableQuestion017 {
public static void main(String args) {
int num1 = 100;
int num2 = 50;
//num1とnum2を入れ変えるには?
System.out.println("num1 = " + num1);
System.out.println("num2 = " + num2);
}
}
【解決方法】
変数を一つ用意して,そちらに値を退避しながら,値を入れ替える。
public class VariableQuestion017 {
public static void main(String args) {
int num1 = 100;
int num2 = 50;
//num1とnum2を入れ変えるには?
int temp = num1; // num1の値を別の変数に退避します。
num1 = num2;//num2の値をnum1に代入します。
num2 = temp;//tempに退避していたnum1の値をnum2に代入します。
System.out.println("num1 = " + num1);
System.out.println("num2 = " + num2);
}
}
【解説】
値を入れかえる場合の処理では,別途,他の変数を用意して,入れ替え作業が必要になります。
【スッキリわかるJava入門編第2版の参考ページ】???ページ
【やりたいこと】:乱数で1から10のどれかを出力したい。
【問題】:上記を実現するためにどのようなコードを記述すればよいでしょう?
【ヒント】:乱数を取得する場合は,RandomクラスのnextIntのメソッドを利用します。
【ファイル名】:VariableQuestion018.java
import java.util.Random;
public class VariableQuestion018 {
public static void main(String args) {
Random rand = new Random();
//この下に乱数を取得するプログラムを記載しましょう。
System.out.println("乱数の値は, ");//乱数の値を出力しましょう。
}
}
【解決方法】
下記のようなコードに変更します。
import java.util.Random;
public class VariableQuestion018 {
public static void main(String args) {
Random rand = new Random();
int num = rand.nextInt(10);//①nextInt(n)は0からn-1 までの範囲でランダムな整数値を取得します。
num = num + 1;//②1から10までの整数値にするため,今回の0-9までの範囲を1-10にするため,+1します。
//①と②を同時に行う int num = rand.nextInt(10) + 1; がシンプルでよいかもしれません。
System.out.println("乱数の値は, " + num);//③num を追加して,乱数の値を出力します。
}
}
【解説】
nextInt(n)は0からn-1 までの範囲でランダムな整数値を取得するメソッドですので,まず0-9までの値を取得します。
その後,1-10の範囲に変更するために,値に+1をして,範囲を切り替えます。
最後にその値を出力します。
【スッキリわかるJava入門編第2版の参考ページ】89-90ページ
【やりたいこと】:入力された文字列をそのまま出力したい。
【問題】:上記を実現するためにどのようなコードを記述すればよいでしょう?
【ヒント】:キーボードからの入力で文字列を受け取りたい場合は,ScannerクラスのnextLineのメソッドを利用します。
【ファイル名】:VariableQuestion019.java
import java.util.Scanner;
public class VariableQuestion019 {
public static void main(String args) {
Scanner sc = new Scanner(System.in);
//この下にプログラムを記載します。
System.out.println("入力された文字列は, ");//入力された文字列の値を出力します。
sc.close();//※Scannerを利用した場合,入力の受付をもうしないという場合,close処理が必要です。
}
}
【解決方法】
下記のようなコードに変更します。
import java.util.Scanner;
public class VariableQuestion019 {
public static void main(String args) {
Scanner sc = new Scanner(System.in);
System.out.println("文字を入力してください。");//①文字列の入力を促すメッセージです。
String str = sc.nextLine();//②文字列を受け取るためのメソッドです。
System.out.println("入力された文字列は, " + str);//③入力された文字列の値を出力します。
sc.close();//※Scannerを利用した場合,入力の受付をもうしないという場合,close処理が必要です。
}
}
【解説】
ScannerクラスのnextLineのメソッドは1行の文字列を入力から受け取ることができます。
文字列を受け取るために,Stringのstrという変数に代入します。
最後にその値を出力します。
【スッキリわかるJava入門編第2版の参考ページ】90-91ページ
【やりたいこと】:文字「A」の文字コードを出力したい。
【問題】:上記を実現するためにどのようなコードを記述すればよいでしょう?
【ファイル名】:VariableQuestion020.java
public class VariableQuestion020 {
public static void main(String args) {
char a = 'A';
//aの変数にあることをすると文字コードが取得できます。
System.out.println("Aの文字コードは,");//ここに文字コードの数値をいれましょう。
}
}
【解決方法】
下記のようなコードに変更します。
public class VariableQuestion020 {
public static void main(String args) {
char a = 'A';
//aの変数にあることをすると文字コードが取得できます。
int num = a;//①charは内部的に数値の情報を持っているので,intに代入することで文字コードが取得できます。
System.out.println("Aの文字コードは," + num);//ここに文字コードの数値をいれましょう。
}
}
【解説】
char型は文字をいれるための型ですが,内部で数値情報を持っているので,intへ代入することで,
内部の文字コードがわかります。
今回の場合の出力は,「Aの文字コードは,65」となります。
【スッキリわかるJava入門編第2版の参考ページ】76-79ページ
【やりたいこと】:キャストを利用せずに,料金priceの消費税(整数値)のみを計算したい。
【問題】:上記を実現するためにどのようなコードを記述すればよいでしょう?
【ファイル名】:VariableQuestion021.java
public class VariableQuestion021 {
public static void main(String args) {
int price = 1000;//料金の変数
int tax = 8;//消費税の8%の変数
int result = ???;//intのキャストを利用せずに,消費税のみを求めましょう。
System.out.println(price + "円の消費税は," + result + "円です。");
}
}
【解決方法】
下記のようなコードに変更します。
public class VariableQuestion021 {
public static void main(String args) {
int price = 1000;//料金の変数
int tax = 8;//消費税の8%の変数
int result = price * tax / 100;//料金priceに消費税taxをかけてから,100で割る。
System.out.println(price + "円の消費税は," + result + "円です。");
}
}
【解説】
キャストを使わずに,消費税を求める場合,すべて整数型intとして対応する必要があります。
この場合,演算時の型の自動変換を起こさせずに,計算順序を上手く考慮して作成する必要があります。
上記コードの順番は上手くいきますが,price / 100 * tax;とした場合,50円などを設定すると0になってしまします。
原因としては,たとえば料金が50円の場合,①50 / 100をintで計算すると,0になり,②0 * tax をするため,0となってしまします。
プログラムを作成する場合,順序がとても大事になりますので,完成した後に,色々な値にして,正しい結果を得られるかを確認しましょう。
【スッキリわかるJava入門編第2版の参考ページ】81ページ
【やりたいこと】:メソッドを利用せずに,数値を文字列型に変換して代入したい。
【問題】:上記を実現するためにどのようなコードを記述すればよいでしょう?
【ファイル名】:VariableQuestion022.java
public class VariableQuestion022 {
public static void main(String args) {
int age = 17;
String strAge = ???;//age を文字列型に変換しましょう。
System.out.println(strAge + "才です。");
}
}
【解決方法】
下記のようなコードに変更します。
public class VariableQuestion022 {
public static void main(String args) {
int age = 17;
String strAge = age + "";//空白の文字列を連結して文字列型へ変換する。
System.out.println(strAge + "才です。");
}
}
【解説】
メソッドを使わずに,文字列型へ変換する場合,演算時の自動変換を利用して,文字列型へ変換をします。
知識として頭にいれておきましょう。
【スッキリわかるJava入門編第2版の参考ページ】82-83ページ
【やりたいこと】:現在,直接出力しているが,変数を用いて記述して,汎用性をあげたい。
【問題】:上記を実現するためにどのようなコードを記述すればよいでしょう?
【ヒント】:変数を二つ用意して,書き直して見ましょう。
【ファイル名】:VariableQuestion023.java
public class VariableQuestion023 {
public static void main(String args) {
System.out.println("100 + 10 = 110");
System.out.println("100 - 10 = 90");
System.out.println("100 * 10 = 1000");
System.out.println("100 / 10 = 10");
}
}
【解決方法】
下記のようなコードに変更します。
public class VariableQuestion023 {
public static void main(String args) {
int num1 = 100;
int num2 = 10;
System.out.println(num1 + " + " + num2 + " = " + (num1 + num2));
System.out.println(num1 + " - " + num2 + " = " + (num1 - num2));
System.out.println(num1 + " * " + num2 + " = " + (num1 * num2));
System.out.println(num1 + " / " + num2 + " = " + (num1 / num2));
}
}
【解説】
あらかじめ計算した結果を直接記述しておくと,修正が必要な場合すべてを変更していかなければならなくなります。
上記のように変数に設定しておいて,記述しておけば,変数の値のみを変更するだけで,プログラムは同様の処理を実現できます。
プログラムを書く際に,変数にしておいたほうがよいかなぁと考えながらコーディングをしていくことで,成長は早くなります。
【スッキリわかるJava入門編第2版の参考ページ】66-83ページ