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

3.1 学習目標

3.2 変数

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

3.2.1 変数と値

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

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

下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。

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

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

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

図 3.2.1.1 変数と値

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.java
  1: /*
  2:  * 家を書くプログラム
  3:  * (変数は複数作れる)
  4:  * 2003/05/08
  5:  * Yoshiaki Matsuzawa
  6:  */
  7: public class MultiVariableHouse extends Turtle {
  8: 
  9: 	//起動処理
 10: 	public static void main(String[] args) {
 11: 		Turtle.startTurtle(new MultiVariableHouse());
 12: 	}
 13: 
 14: 	//タートルを動かす処理
 15: 	public void start() {
 16: 
 17: 		int length;//1辺の長さ
 18: 		int rightAngle;//直角
 19: 		
 20: 		length = 50;//1辺の長さを50に設定する
 21: 		rightAngle = 90;//直角を90度に設定する
 22: 		
 23: 		//屋根を書く
 24: 		rt(30); //30度右に回る
 25: 		fd(length); //x歩前に進む
 26: 		rt(120);
 27: 		fd(length);
 28: 		rt(120);
 29: 		fd(length);
 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: }

下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。

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.java
  1: /*
  2:  * 家を2つ書くプログラム
  3:  * (プロンプト付き)
  4:  * 2003/05/08
  5:  * Yoshiaki Matsuzawa
  6:  */
  7: public class DoubleHouse extends Turtle {
  8: 
  9: 	//起動処理
 10: 	public static void main(String[] args) {
 11: 		Turtle.startTurtle(new DoubleHouse());
 12: 	}
 13: 
 14: 	//タートルを動かす処理
 15: 	public void start() {
 16: 
 17: 		int length;//1辺の長さ
 18: 		int smallHouseLength;//小さい家の1辺の長さ
 19: 		int rightAngle;//直角
 20: 
 21: 		length = 100;//1辺の長さを100に設定する
 22: 		rightAngle = 90;//直角を90度に設定する
 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: 		lt(rightAngle);
 34: 		fd(length);
 35: 		lt(rightAngle);
 36: 		fd(length);
 37: 		lt(rightAngle);
 38: 		fd(length);
 39: 		lt(rightAngle);
 40: 		fd(length);
 41: 		
 42: 		//小さい家を書く位置まで移動する
 43: 		up();
 44: 		lt(rightAngle * 2);
 45: 		fd(length * 2);
 46: 		lt(rightAngle);
 47: 		down();
 48: 		
 49: 		//小さい家の長さを設定する
 50: 		smallHouseLength = length / 2;
 51: 		
 52: 		//小さい家の屋根を書く
 53: 		rt(30); 
 54: 		fd(smallHouseLength);
 55: 		rt(120);
 56: 		fd(smallHouseLength);
 57: 		rt(120);
 58: 		fd(smallHouseLength);
 59: 
 60: 		//小さい家の本体を書く
 61: 		lt(rightAngle);
 62: 		fd(smallHouseLength);
 63: 		lt(rightAngle);
 64: 		fd(smallHouseLength);
 65: 		lt(rightAngle);
 66: 		fd(smallHouseLength);
 67: 		lt(rightAngle);
 68: 		fd(smallHouseLength);		
 69: 	}
 70: 
 71: }

下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。

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

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.java
  1: /*
  2:  * 家を書くプログラム
  3:  * (1辺の長さを入力する)
  4:  * 2003/05/08
  5:  * Yoshiaki Matsuzawa
  6:  */
  7: public class InputHouse extends Turtle {
  8: 
  9: 	//起動処理
 10: 	public static void main(String[] args) {
 11: 		Turtle.startTurtle(new InputHouse());
 12: 	}
 13: 
 14: 	//タートルを動かす処理
 15: 	public void start() {
 16: 
 17: 		int length;//1辺の長さ
 18: 		int rightAngle;//直角
 19: 		
 20: 		length = input();//1辺の長さを入力値に設定する
 21: 		rightAngle = 90;//直角を90度に設定する
 22: 		
 23: 		//屋根を書く
 24: 		rt(30); //30度右に回る
 25: 		fd(length); //x歩前に進む
 26: 		rt(120);
 27: 		fd(length);
 28: 		rt(120);
 29: 		fd(length);
 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: }

下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。

入力を受け付けるには、

input()
			

命令を使います。

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

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

リスト 3.4.2.1 PromptHouse.java
  1: /*
  2:  * 家を書くプログラム
  3:  * (プロンプト付き)
  4:  * 2003/05/08
  5:  * Yoshiaki Matsuzawa
  6:  */
  7: public class PromptHouse extends Turtle {
  8: 
  9: 	//起動処理
 10: 	public static void main(String[] args) {
 11: 		Turtle.startTurtle(new PromptHouse());
 12: 	}
 13: 
 14: 	//タートルを動かす処理
 15: 	public void start() {
 16: 
 17: 		int length;//1辺の長さ
 18: 		int rightAngle;//直角
 19: 
 20: 		print("1辺の長さを入力してください");
 21: 		length = input();//1辺の長さを入力値に設定する
 22: 		rightAngle = 90;//直角を90度に設定する
 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: 		lt(rightAngle);
 34: 		fd(length);
 35: 		lt(rightAngle);
 36: 		fd(length);
 37: 		lt(rightAngle);
 38: 		fd(length);
 39: 		lt(rightAngle);
 40: 		fd(length);
 41: 	}
 42: 
 43: }

下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。

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

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

命令を使います。

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

3.5 おみくじ

3.5.1 乱数

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

下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。

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

random(数)
			

命令を使います。

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

数の所に書いた数が最大値になります。

3.6 練習問題

3.6.1 問題1:五角形や星を描くプログラムの改造

前回作った、五角形や星を描くプログラムを、インタラクティブなプログラムに(拡大、縮小が出来ることが望ましい)してみましょう。 計算も使ってみましょう。 余裕がある人は、大きさの違うものを隣に書いたり、乱数によって形が変化するようなプログラムにも挑戦してみてください。