はじめに
この実験では、Java プログラミングの基本概念である変数と演算子を学びます。さまざまな種類の変数を宣言する方法、いくつかのプリミティブデータ型を理解し、さまざまな演算子と式を使ってみます。この実践的な経験は、Java プログラミングの初心者にとって堅牢な基礎を提供します。
この実験では、Java プログラミングの基本概念である変数と演算子を学びます。さまざまな種類の変数を宣言する方法、いくつかのプリミティブデータ型を理解し、さまざまな演算子と式を使ってみます。この実践的な経験は、Java プログラミングの初心者にとって堅牢な基礎を提供します。
変数は、プログラミングにおいて値を保持する名前付きの格納場所です。Java はいくつかのプリミティブデータ型を提供しており、それぞれ特定の種類の値を格納するように設計されています。これらの概念を実際の例を通じて調べてみましょう。
まず、変数の宣言と使用を示す Java ファイルを作成します。WebIDE(VS Code に似ています)で、VariableDemo.java
という名前の新しいファイルを作成します。これは、ファイルエクスプローラーペインで右クリックし、「新しいファイル」を選択して、ファイル名を入力することで行えます。
次のコードをファイルにコピーして貼り付けます。
public class VariableDemo {
public static void main(String[] args) {
// さまざまな型の変数を宣言して初期化する
byte smallNumber = 127;
short mediumNumber = 32000;
int largeNumber = 2000000000;
long veryLargeNumber = 9000000000000000000L;
float decimalNumber = 3.14f;
double preciseDecimal = 3.14159265359;
char singleCharacter = 'A';
boolean isJavaFun = true;
// 値を出力する
System.out.println("byte: " + smallNumber);
System.out.println("short: " + mediumNumber);
System.out.println("int: " + largeNumber);
System.out.println("long: " + veryLargeNumber);
System.out.println("float: " + decimalNumber);
System.out.println("double: " + preciseDecimal);
System.out.println("char: " + singleCharacter);
System.out.println("boolean: " + isJavaFun);
}
}
このコードを理解するために分解してみましょう。
まず、VariableDemo
という名前のクラスを宣言します。Java では、すべてのプログラムには少なくとも 1 つのクラスが必要です。
クラスの中には、main
メソッドがあります。これは Java プログラムのエントリポイントであり、実行が始まる場所です。
次に、さまざまなプリミティブデータ型の変数を宣言して初期化します。
byte
:非常に小さな整数値(-128 から 127)に使用short
:小さな整数値(-32,768 から 32,767)に使用int
:整数値(約 -20 億から 20 億)に使用long
:非常に大きな整数値(約 -9 京から 9 京)に使用float
:少数(単精度)に使用double
:より高精度の少数に使用char
:1 文字の文字に使用boolean
:真偽値に使用long
値には L
接尾辞があり、float
値には f
接尾辞があることに注意してください。これらは、それぞれこれらのリテラルが long
と float
として扱われるべきであることを Java に知らせるために必要です。
最後に、System.out.println()
を使って各変数を出力します。ここでの +
演算子は、文字列を連結するために使用され、説明用の文字列を変数の値と結合します。
さて、このプログラムを実行してみましょう。WebIDE で、ターミナルペインを開き、次のコマンドを実行します。
javac VariableDemo.java
java VariableDemo
コンソールペインには次のような出力が表示されるはずです。
byte: 127
short: 32000
int: 2000000000
long: 9000000000000000000
float: 3.14
double: 3.14159265359
char: A
boolean: true
この出力は、宣言して初期化した各変数の値を示しています。コードで割り当てた値と一致することを確認するために少し時間をかけてください。
Java の算術演算子を使って数学的な計算を行うことができます。これらの演算子を示す新しいファイルを作成しましょう。
WebIDE で、ArithmeticDemo.java
という名前の新しいファイルを作成します。次のコードをコピーして貼り付けます。
public class ArithmeticDemo {
public static void main(String[] args) {
int a = 10;
int b = 3;
System.out.println("Addition: " + (a + b));
System.out.println("Subtraction: " + (a - b));
System.out.println("Multiplication: " + (a * b));
System.out.println("Division: " + (a / b));
System.out.println("Modulus: " + (a % b));
// インクリメントとデクリメント
int c = 5;
System.out.println("c before increment: " + c);
System.out.println("c after increment: " + (++c));
System.out.println("c after decrement: " + (--c));
}
}
このコードを分解してみましょう。
2 つの整数型変数 a
と b
を宣言し、それぞれ 10 と 3 の値を割り当てます。
次に、さまざまな算術演算を行います。
+
):2 つの数値を加算します-
):左オペランドから右オペランドを引きます*
):2 つの数値を乗算します/
):左オペランドを右オペランドで割ります%
):左オペランドを右オペランドで割ったときの余りを返しますインクリメント (++
) とデクリメント (--
) 演算子も示しています。
++c
は、式で使用される前に c
の値を 1 増やします--c
は、式で使用される前に c
の値を 1 減らしますWebIDE でこのプログラムを実行します。次のような出力が表示されるはずです。
Addition: 13
Subtraction: 7
Multiplication: 30
Division: 3
Modulus: 1
c before increment: 5
c after increment: 6
c after decrement: 5
整数同士を除算する場合 (a / b
)、Java は整数除算を行い、小数部分を切り捨てます。これが 10 / 3
が 3
となり、3.33333...
ではない理由です。
また、インクリメントとデクリメント演算子が c
の値にどのように影響するかを観察してください。これらの演算子を理解することは、多くのプログラミングタスク、特にループを使った場合にとても重要です。
Java のビット演算子を使うと、整数型の個々のビットを操作できます。これらの演算子は日常のプログラミングではあまり使われませんが、バイナリデータを扱ったり、特定のアルゴリズムを最適化するなど、特定のシナリオでは不可欠です。
WebIDE で、BitwiseDemo.java
という名前の新しいファイルを作成します。次のコードをコピーして貼り付けます。
public class BitwiseDemo {
public static void main(String[] args) {
int a = 60; // 60 = 0011 1100 2進数で
int b = 13; // 13 = 0000 1101 2進数で
System.out.println("a & b = " + (a & b)); // AND
System.out.println("a | b = " + (a | b)); // OR
System.out.println("a ^ b = " + (a ^ b)); // XOR
System.out.println("~a = " + (~a)); // NOT
System.out.println("a << 2 = " + (a << 2)); // 左シフト
System.out.println("a >> 2 = " + (a >> 2)); // 右シフト
}
}
これらのビット演算を分解してみましょう。
AND (&
):両方のビットが 1 の場合に 1 を返し、それ以外の場合は 0 を返します。
60 & 13
= 0011 1100 & 0000 1101
= 0000 1100
(10 進数で 12)OR (|
):少なくとも 1 つのビットが 1 の場合に 1 を返し、それ以外の場合は 0 を返します。
60 | 13
= 0011 1100 | 0000 1101
= 0011 1101
(10 進数で 61)XOR (^
):ビットが異なる場合に 1 を返し、同じ場合に 0 を返します。
60 ^ 13
= 0011 1100 ^ 0000 1101
= 0011 0001
(10 進数で 49)NOT (~
):すべてのビットを反転させます。
~60
= ~0011 1100
= 1100 0011
(2 的補数表現により、10 進数で -61)左シフト (<<
):すべてのビットを指定された数のポジションだけ左にシフトします。
60 << 2
= 0011 1100 << 2
= 1111 0000
(10 進数で 240)右シフト (>>
):すべてのビットを指定された数のポジションだけ右にシフトします。
60 >> 2
= 0011 1100 >> 2
= 0000 1111
(10 進数で 15)WebIDE でこのプログラムを実行します。次のような出力が表示されるはずです。
a & b = 12
a | b = 61
a ^ b = 49
~a = -61
a << 2 = 240
a >> 2 = 15
最初はビット演算子を理解するのが難しいかもしれませんが、特定の種類の操作には非常に強力で、特に低レベルのプログラミングやパフォーマンスを最適化するコードを作成する際に役立ちます。
Java の論理演算子は、ブール値に対して論理演算を行うために使用されます。これらの演算子は、プログラム内で複雑な条件を作成する際に欠かせないものです。
WebIDE で、LogicalDemo.java
という名前の新しいファイルを作成します。次のコードをコピーして貼り付けます。
public class LogicalDemo {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println("a && b = " + (a && b)); // 論理 AND
System.out.println("a || b = " + (a || b)); // 論理 OR
System.out.println("!a = " + (!a)); // 論理 NOT
// ショートサーキット評価
int x = 5;
int y = 10;
System.out.println("x < 0 && y++ > 5 = " + (x < 0 && y++ > 5));
System.out.println("y after evaluation: " + y);
}
}
これらの論理演算を分解してみましょう。
AND (&&
):両方のオペランドが true
の場合に true
を返し、それ以外の場合は false
を返します。
true && false
= false
OR (||
):少なくとも 1 つのオペランドが true
の場合に true
を返し、それ以外の場合は false
を返します。
true || false
= true
NOT (!
):ブール値を反転させます。
!true
= false
ショートサーキット評価:式 x < 0 && y++ > 5
では、Java はまず x < 0
を評価します。これは false
なので、全体の結果が false
である限り、2 番目の部分 (y++ > 5
) を評価する必要はありません。これが評価後の y
が 10 のままである理由です。
WebIDE でこのプログラムを実行します。次のような出力が表示されるはずです。
a && b = false
a || b = true
!a = false
x < 0 && y++ > 5 = false
y after evaluation: 10
論理演算子を理解することは、if
文や while
ループなど、プログラム内で条件を作成する際に非常に重要です。&&
と ||
のショートサーキット動作は、特定の状況でコードを最適化するためにも使用できます。
これまで様々な種類の演算子を調べてきましたので、複数の種類の演算子を使う単純な計算機プログラムを作成しましょう。これにより、学んだことを強化し、これらの概念が実際のシナリオでどのように適用できるかを示すことができます。
WebIDE で、SimpleCalculator.java
という名前の新しいファイルを作成します。次のコードをコピーして貼り付けます。
public class SimpleCalculator {
public static void main(String[] args) {
int a = 10;
int b = 5;
// 算術演算
System.out.println("算術演算:");
System.out.println("a + b = " + (a + b));
System.out.println("a - b = " + (a - b));
System.out.println("a * b = " + (a * b));
System.out.println("a / b = " + (a / b));
System.out.println("a % b = " + (a % b));
// ビット演算
System.out.println("\nビット演算:");
System.out.println("a & b = " + (a & b));
System.out.println("a | b = " + (a | b));
System.out.println("a ^ b = " + (a ^ b));
System.out.println("~a = " + (~a));
// 論理演算
boolean x = a > b;
boolean y = a < b;
System.out.println("\n論理演算:");
System.out.println("x && y = " + (x && y));
System.out.println("x || y = " + (x || y));
System.out.println("!x = " + (!x));
// 演算の組み合わせ
System.out.println("\n組み合わせた演算:");
System.out.println("(a + b) * 2 = " + ((a + b) * 2));
System.out.println("(a > b) && (a % b == 0) = " + ((a > b) && (a % b == 0)));
}
}
このコードを分解して各部分を説明しましょう。
算術演算:
a
と b
に対して基本的な算術演算(加算、減算、乗算、除算、剰余)を行います。ビット演算:
a
と b
に対してビット AND、OR、XOR、NOT 演算を行います。論理演算:
a
と b
の比較に基づいて、2 つのブール型変数 x
と y
を作成します。組み合わせた演算:
(a + b) * 2
は、演算の順序を制御するための括弧の使い方を示しています。(a > b) && (a % b == 0)
は、比較、剰余演算、論理 AND を組み合わせています。WebIDE でこのプログラムを実行します。次のような出力が表示されるはずです。
算術演算:
a + b = 15
a - b = 5
a * b = 50
a / b = 2
a % b = 0
ビット演算:
a & b = 0
a | b = 15
a ^ b = 15
~a = -11
論理演算:
x && y = false
x || y = true
!x = false
組み合わせた演算:
(a + b) * 2 = 30
(a > b) && (a % b == 0) = true
この出力は、各種類の演算子がどのように機能するかを示しています。
a
と b
の 2 進数表現を操作した結果を示します。これらの演算子をどのように組み合わせるかを理解することは、より複雑で効率的な Java プログラムを書くために不可欠です。Java の学習を進めるにつれて、これらの演算子を様々な組み合わせで使ってますます複雑な問題を解決するようになります。
この実験では、Java プログラミングの基本概念である変数と演算子を探究しました。int
、boolean
、char
などの基本データ型を含む、さまざまな種類の変数を宣言して使用する方法を学びました。次に、Java のさまざまな演算子について掘り下げました。
実際の例を通じて、これらの演算子が個別に、または組み合わせて使用されて幅広い操作を行う方法を見ました。単一のアプリケーションで複数の種類の演算子の使用を示す単純な計算機プログラムを作成しました。