Java-2 ?>

Java-2

特殊文字、ラッパークラス、配列

前章ではJava言語で用意されている様々な型の扱いを学習してきました。Java2ではさらに特殊文字ラッパークラス配列という概念を説明していきます。これらもJava言語でプログラミングをする上では欠かせない基礎知識になりますので、ここでしっかりと理解するようにしていきましょう。

Javaプロジェクトを作成しよう

Java2のプロジェクトを作成します。
プロジェクト名に章の名前「Java2」を入力し、作成してください。

Javaプロジェクトの作成

特殊文字を理解しよう

改行や\マークなどの特殊文字は「¥」+特定の文字の組み合わせで表現します。例えば改行は「\n」という「\」と「n」の組み合わせによって表すことができます。
※macの場合はoption + ¥で使えます。

エスケープシーケンス 意味
\b バックスペース
\t 水平タブ
\n 改行
\r 復帰
\f 改ページ
\’ シングルクオーテーション
\” ダブルクオーテーション
\\ \文字
\ooo 8進数の文字コードが表す文字
\uhhhh 16進数の文字コードが表す文字

課題:コンソールに特殊文字を出力してみよう

Java2のプロジェクトにRenshu1.javaを作成して、特殊文字を実装してみましょう。

Renshu1.javaのファイルを作成したら、下記のコードを実装していきましょう。コードはコピーせずに実際に書くようにして下さい。

作成したJavaファイルを実行して、動作確認を行ってください。

スクリーンショット 2017-03-16 午前11.49.14


プリミティブ型とラッパークラス

ラッパークラス(参照型)

untitledjavaでは基本データ型として、long, int, float, char, double, booleanが規定されています。これらをプリミティブ型といいます。
プリミティブ型はオブジェクトではないので、それ自身のメソッドを持っていません。これらの基本型を操作しなければならない場合、プリミティブ型をオブジェクトとして操作するクラスが各種定義されています。 これらはプリミティブ型を包み込むという意味でラッパークラスといいます。

プリミティブ型 ラッパークラス(参照型)
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double

ラッパークラスの使い方

int型のラッパークラスIntegerには文字列をInteger型に変換するメソッドがあります。

文字列をInteger型に変換している処理ですが、暗黙的にInteger型を元の基本型int型にキャスト(型変換)しています。
また以下のように数値の計算式にラッパークラスの変数を混ぜて使うことが可能です。

こういった仕組みをオートボクシングと言います。

課題:ラッパークラスを使ってみよう

Java2のプロジェクトにRenshu2.javaを作成して、ラッパークラス使用したプログラムを実装してみましょう。

作成したJavaファイルを実行して、動作確認を行ってください。

スクリーンショット 2017-03-16 午前11.51.44

ラッパークラスを使った型変換については以下の記事も参考にしてください。

プログラマは特に知っておきたい型変換の常識
http://www.atmarkit.co.jp/ait/articles/1009/09/news111.html

配列の基礎を理解しよう

複数のデータを格納する配列について

配列は、変数の集まりです。つまり複数の箱を一度に扱うことができます。
untitled
この図の場合、サイズ5String型の配列(箱)が用意されます。

配列の使い方

untitled

配列の設定は以下でも可能です。

課題:配列を使ったデータの管理

Java2のプロジェクトにRenshu3.javaを作成して、配列の処理を実装してみましょう。これまで扱ってきた変数とは違い、1つの配列変数を用意するだけで複数のデータを代入することができるようになります。

作成したJavaファイルを実行して、動作確認を行ってください。

スクリーンショット 2017-03-16 午前11.54.07

ディープコピー、シャローコピー

深いコピーと浅いコピー

Java2のプロジェクトにRenshu4.javaを作成して、以下のプログラムを実装しましょう。ここでは配列のコピーを行う際の注意点について説明します。

上のソースを実行すると、以下のような出力結果になると思います。配列2の値を操作しただけで、配列1の値も変わってしまいました。

シャローコピー

このようなコピーのされ方をシャローコピー(浅いコピー)と言います。

シャローコピーが起きる原因

Javaではオブジェクトのコピーを行う際、シャローコピー(浅いコピー)、ディープコピー(深いコピー)という2つの方式を意識する必要があります。
先程のコピーを行うと配列2配列1の実態を参照するシャローコピー処理になります。
untitled

ディープコピー(深いコピー)を行う

実態の参照先の値までコピーを行うやり方をディープコピーと言います。
untitled
ディープコピーの方法は二通りあります。通常の変数の代入のように、「」を使用するやり方と、「clone()」メソッドを使用するやり方です。実装方法は以下のようになります。

課題:配列をコピーしてみよう

Java2のプロジェクトにRenshu5.javaを作成して、配列のコピー(ディープコピー)を実装してみましょう。

作成したJavaファイルを実行して、動作確認を行ってください。
スクリーンショット 2017-03-16 午前11.59.21

2次元配列

2次元配列とは配列の配列という形をとっています。つまり配列の各要素にもう1つの配列がある形の事です。
untitled-2

以下の図のように2次元配列の場合、配列のサイズ1つ1つががそれぞれ異なるサイズを管理することが可能です。しかし、データ管理が複雑になるため、あまりお勧めはできません。
untitled-2

課題:2次元配列を使ってみよう

Java2のプロジェクトにRenshu6.javaを作成して、2次元配列を実装してみましょう。

random()メソッドとは?

random()メソッドとは、0.0以上1.0未満の実数を生成するメソッドです。
それを応用して、任意の数値範囲をランダムに生成することができます。
以下のサイトで詳細に説明されています。
http://ysklog.net/java/4-15.html

作成したJavaファイルを実行して、動作確認を行ってください。randomメソッドを使用することによって、実行する度に参照する2次元配列の値が変化している事が理解できるかと思います。(複数回実行して下さい)

スクリーンショット 2017-03-18 午後4.00.09

演習問題

以下のクラスを作成して演習問題を解いてください。各コメント部分が問題になります。各問題の解答を代入した変数はコンソールに出力してください。

期待する出力結果は以下のようになります。

スクリーンショット 2017-03-18 午後4.39.55

解答:a-2