3 コンピュータに情報を記憶させてみよう(変数)

3.1 学習目標

3.2 変数

今回新しく"変数"が登場します。家の大きさを変更できる次のプログラムをみてみましょう。

3.2.1 変数と値

次のプログラムを見てみましょう。

図 3.2.1.1 VariableHouse
リスト 3.2.1.1 VariableHouse.java
  1: /*
  2:  * 家を書くプログラム (変数あり)
  3:  * 2003/05/08 Yoshiaki Matsuzawa
  4:  * 2012/10/16 改訂 Yoshiaki Matsuzawa
  5:  */
  6: public class VariableHouse extends Turtle {
  7: 
  8: 	// 起動処理
  9: 	public static void main(String[] args) {
 10: 		Turtle.startTurtle(new VariableHouse());
 11: 	}
 12: 
 13: 	// タートルを動かす処理
 14: 	public void start() {
 15: 
 16: 		int x;// 変数xを宣言する
 17: 		x = 50;// 変数xに値50を代入する
 18: 
 19: 		{// 屋根を書く
 20: 			rt(30); // 30度右に回る
 21: 			fd(x); // x歩前に進む
 22: 			rt(120);
 23: 			fd(x);
 24: 			rt(120);
 25: 			fd(x);
 26: 		}
 27: 
 28: 		{// 本体を書く
 29: 			lt(90);
 30: 			fd(x);
 31: 			lt(90);
 32: 			fd(x);
 33: 			lt(90);
 34: 			fd(x);
 35: 			lt(90);
 36: 			fd(x);
 37: 		}
 38: 	}
 39: 
 40: }

ここ をクリックすると、プログラムをダウンロードできます。

下のボタンを押すと、VariableHouseプログラムが実行できます。

変数はデータを格納しておく場所のことです。 プログラムでは、「メモリ」の許す限り、データを格納しておくことが出来ます。

格納する場所を一つにつき、一つの名前をつけることが出来ます。

実際に格納されるデータのことを「値」といいます。

図 3.2.1.2 変数と値

3.2.2 変数を使ったプログラムの実行

プログラムの実行過程と変数を見ていきましょう。

3.2.2.1 変数の宣言

図 3.2.2.1.1 変数の宣言

3.2.2.2 変数へ値を代入する

図 3.2.2.2.1 変数へ値を代入する

3.2.2.3 変数を評価して値にする

図 3.2.2.3.1 変数を評価して値にする

3.2.3 複数の変数と変数名

変数はいくつでも使うことが出来ます。

区別するために、変数には異なる名前をつけなければなりません。 異なる名前ならば好きな名前をつけることが出来ます。 空白や特殊記号が使えないのはクラス名と同じです。

3.2.3.1 複数の変数と変数名

図 3.2.3.1.1 MultiVariableHouse
リスト 3.2.3.1.1 MultiVariableHouse.java
  1: /*
  2:  * 家を書くプログラム (変数は複数作れる)
  3:  * 2003/05/08  Yoshiaki Matsuzawa
  4:  * 2012/10/16 改訂 Yoshiaki Matsuzawa
  5:  */
  6: public class MultiVariableHouse extends Turtle {
  7: 
  8: 	// 起動処理
  9: 	public static void main(String[] args) {
 10: 		Turtle.startTurtle(new MultiVariableHouse());
 11: 	}
 12: 
 13: 	// タートルを動かす処理
 14: 	public void start() {
 15: 
 16: 		int length;// 1辺の長さ
 17: 		int rightAngle;// 直角
 18: 
 19: 		length = 50;// 1辺の長さを50に設定する
 20: 		rightAngle = 90;// 直角を90度に設定する
 21: 
 22: 		{// 屋根を書く
 23: 			rt(30); // 30度右に回る
 24: 			fd(length); // x歩前に進む
 25: 			rt(120);
 26: 			fd(length);
 27: 			rt(120);
 28: 			fd(length);
 29: 		}
 30: 
 31: 		{// 本体を書く
 32: 			lt(rightAngle);
 33: 			fd(length);
 34: 			lt(rightAngle);
 35: 			fd(length);
 36: 			lt(rightAngle);
 37: 			fd(length);
 38: 			lt(rightAngle);
 39: 			fd(length);
 40: 		}
 41: 	}
 42: 
 43: }

ここ をクリックすると、プログラムをダウンロードできます。

下のボタンを押すと、MultiVariableHouseプログラムが実行できます。

3.2.3.2 プログラムの実行過程

プログラムの実行過程を追ってみましょう。

図 3.2.3.2.1 変数の宣言
図 3.2.3.2.2 変数の宣言
図 3.2.3.2.3 変数への値の代入
図 3.2.3.2.4 変数への値の代入
図 3.2.3.2.5 変数を評価して値にする

3.3 コンピュータに計算をさせる

3.3.1 計算式を使ったプログラム

図 3.3.1.1 DoubleHouse
リスト 3.3.1.1 DoubleHouse.java
  1: /*
  2:  * 家を2つ書くプログラム (計算させるプログラムの例)
  3:  * 2003/05/08  Yoshiaki Matsuzawa
  4:  * 2012/10/16 改訂 Yoshiaki Matsuzawa
  5:  */
  6: public class DoubleHouse extends Turtle {
  7: 
  8: 	// 起動処理
  9: 	public static void main(String[] args) {
 10: 		Turtle.startTurtle(new DoubleHouse());
 11: 	}
 12: 
 13: 	// タートルを動かす処理
 14: 	public void start() {
 15: 
 16: 		int length = 100;// 1辺の長さ
 17: 		int smallHouseLength;// 小さい家の1辺の長さ
 18: 		int rightAngle = 90;// 直角
 19: 		smallHouseLength = length / 2;
 20: 
 21: 		{// 屋根を書く
 22: 			rt(30); // 30度右に回る
 23: 			fd(length); // x歩前に進む
 24: 			rt(120);
 25: 			fd(length);
 26: 			rt(120);
 27: 			fd(length);
 28: 		}
 29: 
 30: 		{// 本体を書く
 31: 			lt(rightAngle);
 32: 			fd(length);
 33: 			lt(rightAngle);
 34: 			fd(length);
 35: 			lt(rightAngle);
 36: 			fd(length);
 37: 			lt(rightAngle);
 38: 			fd(length);
 39: 		}
 40: 
 41: 		{// 小さい家を書く位置まで移動する
 42: 			up();
 43: 			lt(rightAngle * 2);
 44: 			fd(length * 2);
 45: 			lt(rightAngle);
 46: 			down();
 47: 		}
 48: 
 49: 		{// 小さい家の屋根を書く
 50: 			rt(30);
 51: 			fd(smallHouseLength);
 52: 			rt(120);
 53: 			fd(smallHouseLength);
 54: 			rt(120);
 55: 			fd(smallHouseLength);
 56: 		}
 57: 
 58: 		{ // 小さい家の本体を書く
 59: 			lt(rightAngle);
 60: 			fd(smallHouseLength);
 61: 			lt(rightAngle);
 62: 			fd(smallHouseLength);
 63: 			lt(rightAngle);
 64: 			fd(smallHouseLength);
 65: 			lt(rightAngle);
 66: 			fd(smallHouseLength);
 67: 		}
 68: 	}
 69: 
 70: }

ここ をクリックすると、プログラムをダウンロードできます。

下のボタンを押すと、DoubleHouseプログラムが実行できます。

コンピュータは計算機ですから、計算をさせることが出来ます。例えば、次のように書くと

rightAngle * 2
				

掛け算を行うことが出来ます。

このような、計算を行う書法のことを「式」といいます。

Javaで使うことが出来る基本的な計算命令を以下に示します。

+
足し算をします
-
引き算をします
*
掛け算をします
/
割り算をします
%
割り算の余りを求めます

3.3.2 計算式を使ったプログラムの実行

次のように評価(計算)されて、具体的な値になり、プログラムが動きます。

図 3.3.2.1 変数の宣言

3.3.3 計算式と代入文を使ったプログラムの実行

計算式があっても、右辺から評価されるのは一緒です。

図 3.3.3.1 変数の宣言
考えてみよう

次のようなプログラムが動かない(コンパイルエラーとなる)のは何故ですか?考えてみましょう。

length / 2  = smallHouseLength;
				

3.4 ユーザと対話する(インタラクティブ)なプログラム

3.4.1 入力を受け付ける

図 3.4.1.1 InputHouse
リスト 3.4.1.1 InputHouse.java
  1: /*
  2:  * 家を書くプログラム (1辺の長さを入力する)
  3:  * 2003/05/08  Yoshiaki Matsuzawa
  4:  * 2012/10/16 改訂 Yoshiaki Matsuzawa
  5:  */
  6: public class InputHouse extends Turtle {
  7: 
  8: 	// 起動処理
  9: 	public static void main(String[] args) {
 10: 		Turtle.startTurtle(new InputHouse());
 11: 	}
 12: 
 13: 	// タートルを動かす処理
 14: 	public void start() {
 15: 
 16: 		int length;// 1辺の長さ
 17: 		int rightAngle = 90;// 直角
 18: 
 19: 		length = input();// 1辺の長さを入力値に設定する
 20: 
 21: 		{// 屋根を書く
 22: 			rt(30); // 30度右に回る
 23: 			fd(length); // x歩前に進む
 24: 			rt(120);
 25: 			fd(length);
 26: 			rt(120);
 27: 			fd(length);
 28: 		}
 29: 
 30: 		{// 本体を書く
 31: 			lt(rightAngle);
 32: 			fd(length);
 33: 			lt(rightAngle);
 34: 			fd(length);
 35: 			lt(rightAngle);
 36: 			fd(length);
 37: 			lt(rightAngle);
 38: 			fd(length);
 39: 		}
 40: 	}
 41: 
 42: }

ここ をクリックすると、プログラムをダウンロードできます。

下のボタンを押すと、InputHouseプログラムが実行できます。

入力を受け付けるには、

input()
			

命令を使います。

評価すると、ユーザが入力した値になります。そして、その値が変数に代入されます。

3.4.2 ユーザにメッセージを出す

図 3.4.2.1 PromptHouse
リスト 3.4.2.1 PromptHouse.java
  1: /*
  2:  * 家を書くプログラム (プロンプト付き)
  3:  * 2003/05/08  Yoshiaki Matsuzawa
  4:  * 2012/10/16 改訂 Yoshiaki Matsuzawa
  5:  */
  6: public class PromptHouse extends Turtle {
  7: 
  8: 	// 起動処理
  9: 	public static void main(String[] args) {
 10: 		Turtle.startTurtle(new PromptHouse());
 11: 	}
 12: 
 13: 	// タートルを動かす処理
 14: 	public void start() {
 15: 
 16: 		int length;// 1辺の長さ
 17: 		int rightAngle = 90;// 直角
 18: 
 19: 		{// 入力を受け取る
 20: 			print("1辺の長さを入力してください");
 21: 			length = input();// 1辺の長さを入力値に設定する
 22: 		}
 23: 
 24: 		{// 屋根を書く
 25: 			rt(30); // 30度右に回る
 26: 			fd(length); // x歩前に進む
 27: 			rt(120);
 28: 			fd(length);
 29: 			rt(120);
 30: 			fd(length);
 31: 		}
 32: 
 33: 		{// 本体を書く
 34: 			lt(rightAngle);
 35: 			fd(length);
 36: 			lt(rightAngle);
 37: 			fd(length);
 38: 			lt(rightAngle);
 39: 			fd(length);
 40: 			lt(rightAngle);
 41: 			fd(length);
 42: 		}
 43: 	}
 44: 
 45: }

ここ をクリックすると、プログラムをダウンロードできます。

下のボタンを押すと、PromptHouseプログラムが実行できます。

ユーザにメッセージを出すには

print("ここに出したいメッセージを書く")
			

命令を使います。

出したいメッセージを「"」(ダブルクォーテーション)で囲んでください。

3.5 おみくじ

3.5.1 乱数

図 3.5.1.1 RandomHouse
リスト 3.5.1.1 RandomHouse.java
  1: /*
  2:  * 家を書くプログラム (ランダムな大きさにする)
  3:  * 2003/05/08 Yoshiaki Matsuzawa
  4:  * 2012/10/16 改訂 Yoshiaki Matsuzawa
  5:  */
  6: public class RandomHouse extends Turtle {
  7: 
  8: 	// 起動処理
  9: 	public static void main(String[] args) {
 10: 		Turtle.startTurtle(new RandomHouse());
 11: 	}
 12: 
 13: 	// タートルを動かす処理
 14: 	public void start() {
 15: 
 16: 		int length;// 1辺の長さ
 17: 		int rightAngle = 90;// 直角
 18: 
 19: 		length = random(100);// 1辺の長さを0-99までのランダム値に設定する
 20: 
 21: 		{// 屋根を書く
 22: 			rt(30); // 30度右に回る
 23: 			fd(length); // x歩前に進む
 24: 			rt(120);
 25: 			fd(length);
 26: 			rt(120);
 27: 			fd(length);
 28: 		}
 29: 
 30: 		{// 本体を書く
 31: 			lt(rightAngle);
 32: 			fd(length);
 33: 			lt(rightAngle);
 34: 			fd(length);
 35: 			lt(rightAngle);
 36: 			fd(length);
 37: 			lt(rightAngle);
 38: 			fd(length);
 39: 		}
 40: 	}
 41: 
 42: }

ここ をクリックすると、プログラムをダウンロードできます。

下のボタンを押すと、RandomHouseプログラムが実行できます。

乱数値を(命令毎に毎回変わる値)に取得するには

random(数)
			

命令を使います。

実行されるごとに異なる値が自動的に選択されます。

「0」から「数の所に書いた数」未満のどれかの数字が選択されます。

(例:random(10)のとき、0から9までの10種類のどれかの数が選択されます)

3.6 練習問題

3.6.1 与えられた大きさの正五角形を描くプログラム

ユーザの入力を受け取り、その長さを一辺の長さとして正五角形を描くプログラムを作ってください。

ファイル名は「Pentagon2.java」とすること.

3.6.2 乱数を使って星を描くプログラム

長さに乱数を使い、実行するたびに大きさが変わる星を描くプログラムを作ってください。 乱数は50以上100未満の間になるようにすること。

ファイル名は「Star2.java」とすること.