今回新しく"変数"が登場します。家の大きさを変更できる次のプログラムをみてみましょう。
次のプログラムを見てみましょう。
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: }
下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。
変数はデータを格納しておく場所のことです。 プログラムでは、「メモリ」の許す限り、データを格納しておくことが出来ます。
格納する場所を一つにつき、一つの名前をつけることが出来ます。
実際に格納されるデータのことを「値」といいます。
プログラムの実行過程と変数を見ていきましょう。
変数はいくつでも使うことが出来ます。
区別するために、変数には異なる名前をつけなければなりません。 異なる名前ならば好きな名前をつけることが出来ます。 空白や特殊記号が使えないのはクラス名と同じです。
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: }
下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。
プログラムの実行過程を追ってみましょう。
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で使うことが出来る基本的な計算命令を以下に示します。
次のように評価(計算)されて、具体的な値になり、プログラムが動きます。
計算式があっても、右辺から評価されるのは一緒です。
次のようなプログラムが動かない(コンパイルエラーとなる)のは何故ですか?考えてみましょう。
length / 2 = smallHouseLength;
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()
命令を使います。
評価すると、ユーザが入力した値になります。そして、その値が変数に代入されます。
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("ここに出したいメッセージを書く")
命令を使います。
出したいメッセージを「"」(ダブルクォーテーション)で囲んでください。
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(数)
命令を使います。
実行されるごとに異なる値が自動的に選択されます。
数の所に書いた数が最大値になります。
前回作った、五角形や星を描くプログラムを、インタラクティブなプログラムに(拡大、縮小が出来ることが望ましい)してみましょう。 計算も使ってみましょう。 余裕がある人は、大きさの違うものを隣に書いたり、乱数によって形が変化するようなプログラムにも挑戦してみてください。