読み込み中...
この講座では、プログラミングが全く初めての方でも安心してJavaの基本を学べるように、一緒に手を動かしながら進めていきます。 まずは、Javaの基本的な「書き方」から学んでいきましょう。
まずは、Javaの基本的な書き方をみていきましょう。前回お試しで作成したHelloWorld.javaをみてみると、
package javaTest;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}※package ●●;は人によって違う場合がありますが、実行できていれば問題ありません。
これを実行すると「Hello, world!」と文字が表示されます。ポイントとしては、
HelloWorldという名前のクラスの中に書いています。; (セミコロン)を必ずつける必要があります。また、クラスの名前とファイルの名前は同じである必要があるということ、mainメソッド外に書いた処理は実行しても自動で処理されないことに注意してください。
package javaTest;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
// ↓実行しても処理されない(「こんにちは」は出力されない)
〜〜〜 いろんな処理 〜〜〜
System.out.println("こんにちは");
}※以降、Javaのコード例はmainメソッド内のみ書きます。クラス名などは省略しています。
また、コメントアウトでメモを残すこともできます。
プログラムにメモや説明を書きたいときは、// や /* ... */ を使ってコメントを書くことができます。//以降の文字はプログラムとして実行されません。
System.out.println("Hello, world!");
// これはコメントです。プログラムには影響しません。
System.out.println("Javaを学ぼう!"); // このようにコードの横に書くこともできます
/* * これは複数行にわたるコメントです。
* プログラムには影響しません。
*/プログラミングの超基礎的な概念である変数。変数は、数値や文字などの値を入れられる領域でわかりやすくいうとデータを入れる箱です。 また、変数を使う時によく出てくる言葉もあるのでそれも覚えておきましょう。
Javaでは変数は以下のように宣言、初期化、代入します。
// 変数の宣言
String name;
// 変数の宣言と初期化
String message = "はじめまして!";
System.out.println(message);
// 変数への代入
name = "田中 太郎";
message = "こんばんわ!!!";
System.out.println(message);※Javaでは、「田中 太郎」といった文字列を扱う際はダブルクォーテーション(") で囲う必要があります。
JavaScriptやPythonと違い、変数名の前にStringなどのデータ型を記述する必要があります。Javaで扱えるデータの主な種類は、以下の通りです。
先ほどのmessageはString型です。他の例も見てみましょう。
String name = "太郎";
int age = 25;
boolean isStudent = true;また、JSで扱った配列はJavaだと
に該当します。ここでは、初心者向けの配列について紹介します。配列を使うと複数のデータをまとめて管理することができます。たくさんの名前をひとつの変数で管理したい場合、配列を使うと便利です。配列は [](角括弧)を使って定義します。
Javaの配列は データ型 配列名[] = new データ型[ 個数 ]; で宣言することができます。この宣言の具体的説明は基礎講座で行いますが、簡単にいうと「長さnの 〜型データが入る空間を作って配列名という変数に割り当てた」ということをしています。
さらに、リストの個々のデータにアクセスするには、インデックスというものを使います。インデックスはいわば「場所」のようなもので「先頭から何番目か」を表す番号です。注意点として一番先頭は 0 から始まります。
JSの配列とほぼ同じ使い方です。
// 2つの要素が入るint型の配列を作成
int array[] = new int[2];
// 各要素に任意の数字を格納(何も追加しなければ初期値は0)
array[0] = 5;
array[1] = 2;
// 2番目の要素(インデックス:1)を4に変更する
array[1] = 4; // 単純に上書きすれば良い
System.out.println(array[1]);
// 最初から全ての枠にデータを入れておくことも可能
String[] fruits = { "apple", "banana", "cherry" };
System.out.println(fruits[1]);ただし、Javaの配列は「要素の追加ができない」「削除もできない」といったように自由度が低いため、リストの方を採用する場合が多いです。
Javaのリスト(ArrayList)は List<★データ型> リスト名 = new ArrayList<★データ型>(); で宣言することができます。
※今回は特別に全体のコードを表示します。import 〜の部分があることに気をつけてください。
package ●●;
import java.util.ArrayList;
import java.util.List;
public class HelloWorld {
public static void main(String[] args) {
// String型のリストを準備
List<String> fruits = new ArrayList<String>();
// リストに追加
fruits.add("apple");
fruits.add("banana");
fruits.add("cherry");
// リスト要素を更新
fruits.set(2, "さくらんぼ");
// リスト要素を削除
fruits.remove(2);
System.out.println(fruits.get(1));
}
}ポイントとしては、
| 値型 (プリミティブ型) | データ例 | 参照型 (オブジェクト型)| | -------- | -------- | -------- | | int | 12 | Integer | | float | 5.8 | Float | | boolean | false | Boolean | | - | "こんにちは" | String |
詳しい解説は別の講座で行います。難しい話になりますが、型を定義した対象が「データそのもの」か「データを包んだでっかいモノ(オブジェクト)(の場所)」という違いがあります。今は難しいので「特殊なことする時以外はとりあえずintとかのプリミティブ型を使えばいいのか」で大丈夫です。
超基礎的な概念である演算子。算数的な計算で使う演算子(+や-とか)や、二つのデータを比較するのに使う比較演算子、「AかつB」のような数学の「集合、命題」の時に使った論理演算子をプログラミングでもよく使います。それぞれみていきましょう。
算数的な計算で使う演算子(算術演算子)は以下のように使います。
int a = 5;
int b = 10;
System.out.println(a + b); // 15
System.out.println(a - b); // -5
System.out.println(a * b); // 50
System.out.println(b / a); // 2
a += 3; // a = a + 3 と同じ意味
System.out.println(a); // 8
a--; // a = a - 1 と同じ意味
System.out.println(a); // 7基本的な四則演算で使います。使い方は算数とほぼ同じです。他にも乗数や余りの計算もできますが今回は割愛します。
また、変数への代入の場合はa = a + 3をa += 3のように省略して書くことができます。さらにその代入で加える(+)もしくは引く(-)値が1の場合はそれぞれ、a++,a--のように省略することができます。こちらよく使うので覚えておきましょう。
比較演算子は、2つの値を比較して論理値(trueまたはfalse)を出す時に使います。
int x = 5;
int y = 1;
String z = "5";
System.out.println(x == y); // false(値が等しくない)
System.out.println(x > y); // true(xはyより大きい)
System.out.println(y <= x); // true(yはx以下)
// Javaでは==で値と型を比較します。
// xとzの比較は、型が異なるためコンパイルエラーとなります。
// System.out.println(x == z);それぞれ解説します。まず==は、2つの値が等しいか型も含めて比較します。二つの値が等しいときはtrueになり、等しくないときはfalseになります。
厳密にいえば、
二つの値を比較する>では、左側が右より大きければtrueになり、それ以外はfalseとなります。<を使った場合はその逆です。
似たようなもので>=は、左側が右以上(右の値を含む)ならtrue、それ以外はfalseとなります。<=を使った場合はその逆です。
例えば、x < 5の場合は「xは5より小さい(5未満)か」なのでfalseとなりますが、x <= 5は「xは5以下か」なのでtrueとなります。
論理演算子は、論理値を操作するために使います。
boolean tr = true;
boolean fl = false;
System.out.println(tr && fl); // false(AND)
System.out.println(tr || fl); // true(OR)
System.out.println(!tr); // false(NOT)それぞれ解説します。AND条件にしたい(両方trueでないとtrueにならない)場合は&&を使います。これによりAND条件の判定をすることができます。
OR条件にしたい(どちらかがtrueならtrueになる)場合は||を使います。NOT条件(論理値の逆転)をしたい場合は、その論理値の前に!を置きます。似たようなもので比較演算子で「xとyが等しくないとき」としたいときは、x != yとします。1個目の=を!にすることで、比較した結果の否定値になります。
JSの時とほぼ同じイメージでOKです。
また、今回は変数のみで論理演算子を使いましたが、実際は比較したものに対して論理演算子を使用します。具体的に、AND条件でいうと
System.out.println(3 <= x && x < 10);このように「xが3以上かつ10未満か?」という複合した比較をする際に使用します。細かい使い方は次の制御構文の章で解説します。 これらの使い道としては、算術演算子は数値などのデータの四則演算に、比較演算子と論理演算子は変数などの中身によって処理を変えるために使います。
超基礎的な概念、制御構文を解説します。制御構文は、プログラムの実行内容を制御するための構文です。Javaでは、条件分岐(if文、switch文)とループ(for文、while文)などがあります。
if文は、条件に基づいて異なるコードを実行するために使います。先ほどの変数xを使って、
int x = 5;
if (3 <= x && x < 10) {
System.out.println("3以上、10未満です");
} else if (5 < x) {
System.out.println("5より大きいです");
} else {
System.out.println("それ以外");
}このようにif文を書くことができます。大きく分けて三つのブロックに分かれていて、
if( 条件 ) { 条件を満たす時の処理 }: カッコ( )内に書いた条件を満たす場合のみ、波括弧{ }内に書いた処理を実行します。else if( 条件2 ) { 条件2を満たす時の処理 }: 前の条件を満たさなかったが、条件2を満たす場合のみ、波括弧{ }内に書いた処理を実行します。else { それ以外の時の処理 }: 全ての条件を満たさなかった際はこの波括弧{ }内に書いた処理を実行します。内容としては下の図のように、
・xが3以上、10未満なら、「3以上、10未満です」と出力する(水色)
・それ以外で5より大きい場合(実質的には10以上)なら、「5より大きいです」と出力する(濃い赤)
・それ以外なら「それ以外」と出力する(黄緑)
今回は「3以上、10未満です」が表示されますね。
試しに、if文の直前でxを違う値にして(違う値を代入)してみましょう。
int x = 10;
if (3 <= x && x < 10) {
System.out.println("3以上、10未満です");
} else if (5 < x) {
System.out.println("5より大きいです");
} else {
System.out.println("それ以外");
}こうすると「5より大きいです」と表示されるはずです。もっと複雑に書いてみると、
int x = 10;
if (3 <= x && x < 10) {
if (x == 3) {
System.out.println("xは3です");
} else if (x == 4) {
System.out.println("xは4です");
} else if (x != 6) {
System.out.println("xは6じゃないです");
}
} else if (5 < x) {
System.out.println("5より大きいです");
} else {
System.out.println("それ以外");
}このようにして、条件に合わせた処理を的確に実行することができます。
switch文は、いろいろな条件をピッタリ合うものと比較し、一致した時だけ特定の操作をすることができます。これにより、多くの「もし〜の場合」といった複雑な条件分岐を簡単に書けるようになります。よく使うのは「たくさんの選択肢の中から選ぶ」時の処理とかで役立ちます。 switch文は以下のような仕組みになっています。
switch(対象){
case パターン1:
// パターン1にマッチした場合の処理
break;
case パターン2:
// パターン2にマッチした場合の処理
break;
default:
//どのパターンにもマッチしなかった場合の処理
}このように「特定の対象」に対して合致したパターンでの処理のみを行うことができます。例として、
int x = 5;
switch (x) {
case 20:
System.out.println("20です");
break;
case 5:
System.out.println("5です");
break;
default:
System.out.println("それ以外");
break;
}というように調べたい対象がどんなものか、case ~に一致すればその処理を、すべて一致しなければdefaultでの処理が実行されます。ポイントとしては、
for文は、一定の回数だけループさせる時に使います。何回も繰り返し処理を実行したりする時に使います。例えば、「1~3の数字を出力して」は以下のように書くことができます。
System.out.println(1);
System.out.println(2);
System.out.println(3);では、「1~100の数字を出力して」だとちょっと面倒ですね。素直にSystem.out.println(1);からSystem.out.println(100);を書けばできますが大変です。そんな時に使うのがこの繰り返し(ループ)であるfor文です。for文でやった例は以下です。
for (int i = 1; i <= 100; i++) {
System.out.println(i);
}たった3行で1~100の数字を出力できます。どうなっているか解説すると「変数iが100以下ならSystem.out.println(i)して、その後にiを1増やす」ということを繰り返しています。もっと詳しくすると、for文の構造は、
for (変数を定義・初期化※for文内のみ使える変数; 繰り返しを継続するかの判定; 処理が終わった後の更新) {
処理
}となっていて今回の場合は、
int i =0を定義(初期化)i <= 100がtrueなら処理実行{ ~処理~ }の処理を実行i = i + 1の省略形i++: iに1を加算といったことをしています。このようにして繰り返し処理をしていきます。
似たようなもので、while文というものがあります。こちらは条件がtrueの間、永遠にループさせる時に使います。先ほどの「1~100の数字を出力して」をwhile文で書くと以下のようになります。
int i = 1;
while (i <= 100) {
System.out.println(i);
i++;
}やっていること自体はfor文の時と変わらないのですが、動作や状況は少し異なり、以下の違いがあります。
そのため、以下のようにしても同じように「1~100の数字を出力して」ができます。
int i = 0;
while (i < 100) {
i++;
System.out.println(i);
}このように、繰り返しに関係するデータをいつでも変更できる自由度が高いのがwhileです。注意点としては、今回でいうi++;のような繰り返しに関するデータの更新部分を書き忘れると、繰り返す条件i < 100が永遠にtrueのままになるため、処理が永遠に実行されてしまいます。無限ループといわれる現象です。
こうならないために、繰り返し文を書く際はちゃんと終わることを確認しながらやりましょう。
※無限ループを起こした場合、停止ボタンもしくは実行されているターミナル/コマンドプロンプト上でショートカットの Ctrl+C を押すと止まります。
関数(ファンクション) は、特定の処理をひとまとめにして名前をつけ、必要なときに何度でも呼び出して使うことができるものです。Javaでは、メソッドはクラスの中に定義します。
・関数を使うメリット
基本的な関数の書き方はいくつかありますが、まずはこの形を覚えてください。
※今回は特別に全体のコードを表示します。mainメソッド外に関数(hello)を書いているので注意してください。
※これ以降package ●●;の部分は省略します。
public class HelloWorld {
// 関数の宣言(メソッドの定義)
public static void hello() {
System.out.println("こんにちは!");
}
public static void main(String[] args) {
// 関数の呼び出し
hello(); // 「こんにちは!」と表示される
hello(); // もう一度呼び出すと、また「こんにちは!」と表示される
}
}void にします。関数には、外部からデータを受け取ったり、処理結果を返したりする機能もあります。
public class HelloWorld {
// 引数を受け取る関数
public static void greetByName(String name) {
System.out.println("こんにちは、" + name + "さん!");
}
// 引数を受け取り、戻り値を返す関数
public static int add(int a, int b) {
int culc = a + b;
culc = culc - 1;
return culc; // 最終計算結果を返す
}
public static void main(String[] args) {
greetByName("太郎"); // 「こんにちは、太郎さん!」と表示
greetByName("花子"); // 「こんにちは、花子さん!」と表示
int result = add(5, 3); // add関数に5と3を渡し、処理終わったデータ(戻り値)をresult変数に入れる
System.out.println(result); // 「7」と表示
int anotherResult = add(10, 20);
System.out.println(anotherResult); // 「29」と表示
}
}このようにして処理をまとめておいて汎用的に管理したい時に関数を使うと便利になります。 先ほどのカレー作りでいうと、
function 食材切る(食材の型 食材) {
// 食材を切る処理
return 切った食材;
}
function 炒める(材料の型 材料) {
// 材料を炒める処理
return 炒めた食材;
}
〜〜〜のように関数を用意することで、
// カレーを作る
// ↓
let 切った玉ねぎ = 食材切る(玉ねぎ)
let 切ったにんじん = 食材切る(にんじん)
let 切ったジャガイモ = 食材切る(ジャガイモ)
let 切った肉 = 食材切る(肉)
let 炒めた肉 = 炒める(切った肉)
let 炒めた玉ねぎ = 炒める(切った玉ねぎ)
〜〜〜と実装することができます。
さらに、関数: 食材切るの処理を間違えて「微塵切り」と書いてしまったが本当は「ざく切り」だった時、この食材切る関数の中の処理だけ直せば
全てに適用される! というように関数を使うことでメンテナンスしやすい実装にすることができます。
この講座で、Javaの基礎を学ぶことができました。変数、データ型、演算子、制御構文、関数といった基本的な概念を理解することで、システムチックなプログラミングへの第一歩を踏み出すことができました。これからは、これらの知識を基により高度なJavaの機能や実践的なコーディングテクニックを学んでいきましょう。