特集PC技術

Java言語入門 ~C言語を学んだ君へ~

 

[第4回]変数と演算と配列と

第4回では、プログラムの基礎知識について学びます。
プログラムの基礎知識とは・・・
変数、データ型、配列、文字列、エスケープ文字、各種演算子、キャストについてです。
C言語を学んできたみなさんは変数とか配列とか演算とか分かっていると思います。
そのため、この回ではC言語と比較してJavaでできるようになったことをメインに紹介します。

[1] 変数

C言語と酷似している部分が多いので新しくできること、変わったことを覚えてください。
Javaでは、以下の基本データ型があります。

データ型一覧
説明
boolean 1ビット真偽値(trueまたはfalse)
char 16ビットUnicode文字
byte 8ビット符号付き整数
short 16ビット符号付き整数
int 32ビット符号付き整数
long 64ビット符号付き整数
float 32ビット符号付き浮動小数点数
double 64ビット符号付き浮動小数点数

ほとんどC言語と同じ型ですが、booleanだけはC言語にはない型です。
これは真偽値を表し、trueかfalseの2種類のみ代入することができます。主に制御文などで使用されます。
詳細については、第5回「繰り返し処理と分岐処理」 で扱っていますので、そちらを見てください。
データ型?変数?という方は納得C言語第2回データ型を見てください。
変数が、Javaでどのように変わったのか見ていきます。
以下のプログラムを書いて実行してみましょう。

宣言と代入と表示のプログラム
public class Java04_01{
	public static void main(String args[]){
		int value1 = 20;
		System.out.println(value1);
		// 処理(System.out.prinln)の後に変数を宣言してもエラーにならなくなった。
		int value2 = 10;
		System.out.println(value2);
	}
}
実行結果

実行結果

C言語で変数宣言をする時には必ず処理の前に書く必要がありました。
しかし、このプログラムを見てみると、System.out.println()を使った後に
int型のvalue2を宣言して利用しています。
C言語では関数の初めに宣言しなくてはいけませんでしたが、Javaではそのような制約はありません。
わざわざ戻ることなく自由に宣言することができるのでとても便利になりました。

[2] 文字列

C言語ではchar型の配列を用意して文字列を扱いました。

char str[] = "string";

JavaもC言語のようにchar型の配列で文字列を定義できますが、
もっと簡単に文字列を扱うことができます。

Javaの文字列定義

String str = "string";

まるで文字列を格納する基本データ型があるかのように見えます。
実際はStringというクラスなのですが、今は基本データ型の一つだと思ってください。
クラスについては第8回「クラス」で説明します。
では、このStringというものがどのようなものなのかプログラムで見てみましょう。

文字列のサンプルプログラム
public class Java04_02{
	public static void main(String args[]){
		String str = "ほぷしぃ";
		System.out.println(str);
	}
}
実行結果

実行結果

変数と同じイメージで使えることが分かりました。
Javaでは文字列をString型で使用すると簡単です。

[3] 変数の表示

変数の値を表示するだけだったり、文字列を表示するだけの方法は学びました。
では、次に文字列と変数の値を表示するときにどのようにするのか説明します。

文字列と変数の表示サンプルプログラム
public class Java04_03{
	public static void main(String args[]){
		int value = 10;
		System.out.println("valueの値 = "+ value);

		//C言語の時は以下のように書きました
		//printf("valueの値 = %d", value);

	}
}
実行結果

実行結果

System.out.println("a=" +a);

これをC言語で記述するとこのようになります。

printf("a=%d", a);

と全く同じ結果を得ることができます。

C言語では%dという出力先を記述して、後で変数を記述しました。
実行してみると、%dの部分が変数aに置き換わり表示されます。

Javaでは("a=" +a)と書けば a=100と表示されます。
Javaでは表示順のまま記述するのでどの値がどの位置に表示されるのかよくわかるようになりました.。

[4] 配列

配列は、C言語と少しだけ違うので注意が必要です。
C言語の配列宣言と比較して、実際にJavaの配列の扱いを学びましょう。
まずはプログラムを見てください。

配列のサンプルプログラム
public class Java04_04{
	public static void main(String args[]){
		//配列宣言の方法と代入
		int [] array = new int[3];
		array[0] = 1;
		array[1] = 2;
		array[2] = 3;
		//array[3] = 4; 配列の範囲外への代入はエラー

		// 配列の長さを調べる方法は今後役に立つので覚えよう
		System.out.println("配列の長さ = "+ array.length);

		//2次元配列
		int [][] array2 = new int[2][2];
		array2[0][1] = 3;
		System.out.println(array2[0][1]);

		//一括でこのように初期化できる
		int values[] = {0, 1, 2};
		System.out.println(values[2]);
	}
}
実行結果

実行結果
宣言方法が今までとは全然違うという点が重要です。

int array[] = new int[3];

データ型 配列名[] = new データ型[要素数]とJavaでは書きます。
これを2行で書く場合には、以下のように書きます。

int array[];
array = new int[3];

代入方法と添え字はC言語と同じですね。

2次元配列を使いたときには上記プログラムのように記述します。
配列を作成と同時に初期化する方法はC言語と似ています。

さて、ここで"array.length"とあります。

配列名.length

上記のようにすることで、その指定した配列の長さを知ることができます。
これはC言語にはない特殊な機能です。覚えておくと役に立ちます。

[5] エスケープ文字

C言語にエスケープシーケンスというものがありました。
Javaにも同じような機能を持つ特殊記号があります。
Javaではエスケープ文字と言います。
以下にエスケープ文字の一覧を表示します。

エスケープ文字一覧
文字 機能
\b バックスペース
\f 改ページ
\n 改行
\r
\t 水平タブ
\\ \
\' '
\" "

では実際にプログラムを見てみましょう。

エスケープ文字を使ったプログラム
public class Java04_05{
	public static void main(String args[]){
		System.out.println("タブ\t aa ");
		System.out.println("ダブルコーテーションを表示:\" ");
		System.out.println("シングルコーテーションを表示:\' ");
		System.out.println("\\自身を表示:\\");
	}
}
実行結果

実行結果
ただ表示しただけのプログラムです。C言語でも同様に扱いました。

[6] 演算子

計算、条件を指定等に演算子というものをC言語で使いました。
JavaにもC言語と同じように、演算子があります。
また、演算子の優先順位もC言語と同じです。
以下に各演算子についてまとめておきます。

算術演算子

算術演算子とは足し算、引き算、掛け算、割り算等のことです。

演算子 機能
+ 足し算 A = B + C
- 引き算 A = B - C
* 掛け算 A = B * C
/ 割り算 A = B / C
% あまり A = B % C

インクリメントとデクリメントももちろん使うことができます。

関係演算子

関係演算子とは2つの値の大小を比較する演算子です。

演算子 機能
< 小さい
<= 以下
> 大きい
>= 以上

等価演算子

同じかどうか比較する演算子を等価演算子といいます。

演算子 機能
== 等しい
!= 等しくない

論理演算子

複数の条件を指定する場合に使う演算子を論理演算子といいます。

演算子 機能
! 否定
&& かつ(論理積)
|| または(論理和)

複合代入演算子

複数の処理をまとめて記載できる演算子です。

演算子 使用例 同じ処理
+= A += B A = A + B
-= A -= B A = A - B
*= A *= B A = A * B
/= A /= B A = A / B
%= A %= B A = A % B

その他演算子

その他の演算子です。

演算子 機能
~ ビットの反転
& ビットごとの論理積(AND)
| ビットごとの論理和(OR)
^ ビットごとの排他的論理和(XOR)
<< 左シフト
>> 右シフト
>>> 論理右シフト
?: 条件演算子
instanceof オブジェクト、配列の型の比較
new オブジェクト生成

見慣れないinstanceofとnewがあります。これはここでは説明せずに後に回すことにします。
instanceofは第10回「インタフェース」、newは第8回「クラス」で説明します。
詳細については、そちらを見てください。
演算子を使ったプログラムを見ていきましょう。実は加算演算子(+)だけだけ気をつける点があります。

演算子のプログラム
public class Java04_06{
	public static void main(String args[]){
		// value1 + value2 を計算するプログラム
		int value1 = 10;
		int value2 = 20;

		// この方法だと想定している答えにならない
		System.out.println("2つの合計値"+ value1 + value2);

		// この方法だと想定している答えになる
		System.out.println("2つの合計値"+ (value1 + value2) );
	}
}
実行結果

実行結果

1つ目のSystem.out.println1では予想通りの結果を得ることができません。
このときの"+"は文字連結演算子と呼ばれ、文字をくっつける働きをしているためです。
細かく説明すると、以下のように処理しているのです。

1.  2つの合計値 + value1 + value2
2.  2つの合計値10 + value2
3.  2つの合計値1020

value1までは特に問題ないのですが、value1も同じ優先順位の"+"だと判断されて1020になってしまいます。
もし2つの値を合計して表示したい場合には()で優先順位を変える必要があります。

1.  2つの合計値 + (value1 + value2)
2.  2つの合計値 + 30
3.  2つの合計値30

2つ目のSystem.out.println();はまさに求めている結果が表示されています。
このような部分で計算するときには()をつけておくと後で見るときに便利だと思います。

[7] キャスト(変換)

C言語でキャストは学びました。Javaでもキャストがあります。
キャストについて復習を兼ねて説明を入れておきます。
異なるデータ型での処理の際に表現できない情報を代入するとエラーが起きます。
そこで、適切なデータ型に入れるために型変換(キャスト)をします。
小さい型から大きい型への代入は型変換を自動的に行ってくれます。

自動的にキャストしてくれる例

int vaule1 = 10;
double vaule2;
vaule2 = vaule1;

逆に大きい型から小さい型への代入は型変換を行えません。

自動的にキャストしない例

double value1 = 1.414;
int value2 = value1; // ここでエラーが起きます

この例はdouble型からint型へ代入を行っていますが、intよりdouble型のほうが大きいため、型変換が自動的には行われません。
これは、変換によって、1.414という数字のうち0.414がintでは扱えないために発生する現象です。
それでも、代入したい型に合わせて変換する必要があった場合にはこのようにします。

意図的にキャストする例

double value1 = 1.414;
int value2 = (int)value1; // 適切に型変換するとエラーは起きません

なお、今回はデータ型のキャストを行いましたが、オブジェクトにもキャストはあります。
それについては、第9回「継承」で説明します。

次に、ここまで学んできたことについて練習問題を解いて復習しましょう。

[8]練習問題 第1問

以下の指示に従ってプログラムを作成しなさい。
ファイル名は、"Ex04_01.java"とする。

作成にあたっての条件

1.文字定数'A'を適切なデータ型で変数(cd)として初期化
2.数値"100"を適切なデータ型で変数(id)として初期化
3.数値"200.2"を適切なデータ型で変数(dd)として初期化
4.1~3で作成した3つの変数の値を下の出力結果のように表示

出力結果

練習問題出力結果

[9]第1問解答

[10]練習問題 第2問

以下の指示に従ってプログラムを作成しなさい。
ファイル名は"Ex04_02.java"とする。

作成にあたっての条件

1."ほぷしぃ"を格納する変数(string)を宣言し初期化。なお、配列の使用は禁止
2.a,b,cを格納する配列(array)を宣言し初期化
3.1,2で作成した変数、または配列を出力結果のように出力

出力結果

プログラムの出力結果

[11]第2問解答

[12]練習問題 第3問

以下の指示に従ってプログラムを作成しなさい。
ファイル名は"Ex04_03.java"とする。

作成にあたっての条件

1.int型変数a,bを宣言し、aには30、bには20を代入
2.変数a,bの値を以下の出力結果のように出力
3.変数aと変数bの四則演算の結果を出力結果のように出力
4.変数はaとb以外の使用は禁止

出力結果

出力結果

[13]第3問解答

コメントの投稿


画像の中に見える文字を入力してください。

トラックバックURL

http://www.isl.ne.jp/cgi-bin/mt/mt-tb.cgi/1048

pagetopこのページの先頭へ戻る