1
Processing と Java の対応
今回扱う範囲はProcessingと共通するものが多くあります。ただし、Javaでは型の種類やコンパイル手順をより明確に意識します。
| 項目 | Processingとの違い | 今回の注目点 |
|---|---|---|
| 演算子 | 基本は同じ | ビット操作演算子も確認する |
| 変数の宣言 | 基本は同じ | 型を先に書いてから変数名を書く |
| 変数型 | Javaのほうが多い | long、short、byte、double など |
| 文字列 | 基本は同じ | 特殊文字はエスケープする |
| 条件分岐・繰り返し | 基本は同じ | break、continue の動きも確認する |
2
作成・コンパイル・実行の流れ
- コマンドプロンプト、テキストエディタ、演習用フォルダを開く。
- ソースコードを作成し、クラス名と同じ名前の .java ファイルとして保存する。
- javac クラス名.java でコンパイルする。
- java クラス名 で実行する。
cmd
javac OperatorSample.java
java OperatorSample
Javaでは、公開クラスの名前とファイル名を一致させます。たとえば class OperatorSample なら、保存名は OperatorSample.java です。
3
演算子
算術演算子は数値計算、比較演算子は true / false の判定、論理演算子は条件の組み合わせに使います。
02-j-3 / OperatorSample.java
class OperatorSample {
public static void main(String[] args) {
System.out.println(10 + 20); // 30
System.out.println(30 - 40); // -10
System.out.println(50 * 60); // 3000
System.out.println(70 / 80); // 0
System.out.println(90 % 10); // 0
}
}
整数同士の割り算では、小数点以下が切り捨てられます。70 / 80 は 0.875 ではなく 0 です。
比較演算子
| 式 | 意味 | 結果 |
|---|---|---|
| 100 < 110 | より小さい | true |
| 100 > 110 | より大きい | false |
| 100 <= 100 | 以下 | true |
| 100 >= 100 | 以上 | true |
| 100 == 110 | 等しい | false |
| 100 != 110 | 等しくない | true |
論理演算子
LogicSample.java
boolean a = true;
boolean b = false;
System.out.println(a & b); // false: AND
System.out.println(a | b); // true: OR
System.out.println(a ^ b); // true: XOR
System.out.println(!a); // false: NOT
インクリメントとビットシフト
x++ と ++x は、どちらも変数 x を1増やします。ビットシフトは整数の内部表現を左右にずらす演算です。
| 式 | 動き | 結果 |
|---|---|---|
| -8 >> 2 | 符号を維持して右に2ビットシフト | -2 |
| -8 >>> 2 | 左端を0で埋めて右に2ビットシフト | 1073741822 |
| -8 << 2 | 左に2ビットシフト | -32 |
4
変数と型
Javaの変数は、値そのものを扱う基本型と、オブジェクトへの参照を扱う参照型に大きく分けられます。String は文字列ですが、分類としては参照型です。
| 型 | 用途 | ラッパークラス |
|---|---|---|
| int | 32bit整数 | Integer |
| long | 64bit整数 | Long |
| short | 16bit整数 | Short |
| byte | 8bit整数 | Byte |
| char | 1文字 | Character |
| float | 32bit浮動小数点数。値の末尾に f を付ける | Float |
| double | 64bit浮動小数点数 | Double |
| boolean | true または false | Boolean |
オーバーフロー
02-j-401 / OverflowSample.java
class OverflowSample {
public static void main(String[] args) {
int max = Integer.MAX_VALUE;
System.out.println(max);
System.out.println(max + 1);
}
}
出力を確認する
output
2147483647
-2147483648
表現できる最大値を超えると、期待した数学的な結果ではなく、型の範囲に従った値になります。
ラッパークラスと文字列からの変換
02-j-402 / ParseSample.java
class ParseSample {
public static void main(String[] args) {
String a = "1234";
String b = "5678.9";
int n = Integer.parseInt(a);
double d = Double.parseDouble(b);
System.out.println(n + 10); // 1244
System.out.println(d + 0.1); // 5679.0
}
}
型キャスト
表現範囲の広い型へ代入する場合は自動変換されます。狭い型へ入れる場合は、失われる情報があるため明示的なキャストが必要です。
CastSample.java
class CastSample {
public static void main(String[] args) {
int a = 100;
long b = a; // 自動変換
int c = (int) b; // 明示的なキャスト
}
}
5
文字列の扱い
文字列は String 型で扱います。文字列内にダブルクォーテーションや改行などの特殊な文字を入れる場合は、エスケープシーケンスを使います。
02-j-5 / StringSample.java
class StringSample {
public static void main(String[] args) {
String s1 = "私は\"学生\"です";
System.out.println(s1);
}
}
| 書き方 | 意味 |
|---|---|
| \b | バックスペース |
| \t | 水平タブ |
| \n | 改行 |
| \' | シングルクォーテーション |
| \" | ダブルクォーテーション |
| \\ | 円マークまたはバックスラッシュ |
6
条件分岐と繰り返し処理
Javaの if、switch、for、while の基本形はProcessingとほぼ同じです。処理が1文だけの場合、中かっこは省略できますが、最初は省略せずに書くほうが読み間違いを防げます。
02-j-601 / ControlSample.java
class ControlSample {
public static void main(String[] args) {
int score = 80;
if (score >= 60) {
System.out.println("合格");
} else {
System.out.println("再提出");
}
for (int i = 0; i < 3; i++) {
System.out.println(i);
}
}
}
switch-case の注意点
switch 文では、各 case の最後に break を書かないと、次の case の処理も続けて実行されます。この動きをフォールスルーと呼びます。
02-j-602 / SwitchSample.java
class SwitchSample {
public static void main(String[] args) {
int label = 2;
switch (label) {
case 1:
System.out.println("label1");
break;
case 2:
System.out.println("label2");
break;
default:
System.out.println("その他");
}
}
}
for / while / do-while
- for 初期化、条件、増分を1行にまとめて書く。回数が見えている繰り返しに向いています。
- while 条件を先に判定する。条件が最初からfalseなら一度も実行されません。
- do-while 処理を先に実行してから条件を判定するため、必ず一度は実行されます。
02-j-603 / LoopControlSample.java
class LoopControlSample {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
if (i == 1) {
continue; // この周回だけスキップ
}
if (i == 4) {
break; // ループを終了
}
System.out.println(i);
}
}
}