- トップページ
- 特集PC技術
- Java言語入門 ~C言語を学んだ君へ~
- [第4回]変数と演算と配列と
Java言語入門 ~C言語を学んだ君へ~
[第4回]変数と演算と配列と
第4回では、プログラムの基礎知識について学びます。
プログラムの基礎知識とは・・・
変数、データ型、配列、文字列、エスケープ文字、各種演算子、キャストについてです。
C言語を学んできたみなさんは変数とか配列とか演算とか分かっていると思います。
そのため、この回ではC言語と比較してJavaでできるようになったことをメインに紹介します。
- [1] 変数
- [2] 文字列
- [3] 変数の表示
- [4] 配列
- [5] エスケープ文字
- [6] 演算子
- [7] キャスト(変換)
- [8] 練習問題 第1問
- [9] 第1問解答
- [10] 練習問題 第2問
- [11] 第2問解答
- [12] 練習問題 第3問
- [13] 第3問解答
[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問解答
第1問解説
各値にあった適切な変数を宣言して値を表示するプログラムです。
C言語を学んできたみなさんにとって特に問題はないと思います。
しつこいようですが、文字出力をする時にはJavaでは少し異なります。
3~5行目
まず、必要なデータ型を宣言します。
文字定数'A'は1文字の文字なのでchar型で宣言します。
数値100は整数なのでint型で宣言します。
数値200.2は小数を扱う数字なのでdouble型、もしくはfloat型で宣言します。
6~8行目
次に宣言した各変数を表示します。
変数の表示には"System.out.println();"を使います。
おさらいになりますが、 「" "」 に挟まれた部分はそのまま画面に表示されます。
System.out.println("cd =");
とすれば cd = と表示されるわけです。
この後に宣言した変数を表示するときには + 変数名とします。
System.out.println("cd ="+ 変数名);
となるわけです。この変数名に自分で作成した変数名を記述します。
解答の場合だとcd、dd、idになります。
この "+" は足し算ではなくて、くっつけるという意味の文字列連結演算子です。
[10]練習問題 第2問
以下の指示に従ってプログラムを作成しなさい。
ファイル名は"Ex04_02.java"とする。
作成にあたっての条件
1."ほぷしぃ"を格納する変数(string)を宣言し初期化。なお、配列の使用は禁止
2.a,b,cを格納する配列(array)を宣言し初期化
3.1,2で作成した変数、または配列を出力結果のように出力
出力結果
[11]第2問解答
第2問解説
練習問題2では、文字列と配列についてやりました。
配列の宣言方法は少しC言語とは違うのですぐにできなかった方もいるでしょう。
3行目:文字列のデータ型
作成条件が配列意外なので、文字列のデータ型はString型を使います。
文字列を代入するときには代入する値の両側に「""」(ダブルクォーテーション)を入れます。
これはC言語でも同じです。
4~7行目:配列の宣言
Javaで配列宣言の方法は、 以下のようになります。
データ型 配列名[] = new データ型[要素数];
このとき、2つの"データ型"は同じである必要があります。
配列の代入方法はC言語と同じです。このプログラムでは以下のようにしています。
array[0] = 'a';
array[1] = 'b';
array[2] = 'c';
入れる文字は1文字なので「'」(シングルクォーテーション)を使います。
また、この宣言した配列を使うときの注意点として、"要素数-1"が最大です。
要素数を3と宣言したら、使えるのは0,1,2です。
もちろん、このプログラムを1行で書いてもかいません。
char array[] = {'a', 'b', 'c'};
8~11行目:出力
画面の出力方法はもう大丈夫ですよね。
"+"は足し算の"+"ではなくて、文字をくっつける意味の"+"です。
[12]練習問題 第3問
以下の指示に従ってプログラムを作成しなさい。
ファイル名は"Ex04_03.java"とする。
作成にあたっての条件
1.int型変数a,bを宣言し、aには30、bには20を代入
2.変数a,bの値を以下の出力結果のように出力
3.変数aと変数bの四則演算の結果を出力結果のように出力
4.変数はaとb以外の使用は禁止
出力結果
[13]第3問解答
第3問解説
演算子を用いたプログラムです。
足し算、引き算、掛け算はそれほど難しくはないと思います。
問題は割り算です。うまくできたでしょうか?
7~9行目:足し算、引き算、掛け算
足し算、引き算、掛け算をするときにどの演算子を使うのかわかりますね。
注意してほしいのは、"(a + b)"の"()"を外して"a + b"にすると、3020と表示されてしまうところです。
これではいけません。これは、文字列をくっつける"+"だと認識されてしまうからです。
そのため、"()"を使って優先順位を変更して先に計算を行います。
引き算、掛け算も同様に行えばいいでしょう。
掛け算の場合は"*"が"+"よりも優先順位が高いので、"()"がなくても計算が先に処理されます。
この例では、見やすいように"()"をつけました。
10行目:割り算
割り算ではただ、"a/b"では、小数点以下の値を表示することができません。
これは、int型は整数値しか扱うことができないからです。
そこで、小数点以下の値も表示できるデータ型にキャストを行う必要があります。
ここでは、小数点以下を扱えるデータ型のdoubleにキャストしています。 ここは少し難しかったかもしれません。
コメントの投稿
トラックバックURL
http://www.isl.ne.jp/cgi-bin/mt/mt-tb.cgi/1048