計算機プログラミングI 第3回 プリミティブ値 クラスメソッド クラス変数 式と演算 変数の利用
プリミティブ値 (3.1-2) 値には2種類ある オブジェクト値 ― 亀・ウィンドウ・色・・・ プリミティブ値 (p.23の表) プリミティブ値 (3.1-2) 値には2種類ある オブジェクト値 ― 亀・ウィンドウ・色・・・ プリミティブ値 (p.23の表) primitive = 原始的~はじめから用意されている値 (cf. オブジェクトは「定義」して「作る」値) 用意されているもの: 整数・小数・真偽値・文字 (cf. 文字列はプリミィブでない) 型 (値の種類) も予め決っている: int, double, boolean, char, … 計算機プログラミングI (増原) 2003年度
値と変数 「変数は値をしまう箱」である int x = 100; int y = y; x = 200; このときのxとyの値は? Turtle m = new Turtle(200,200,0); Turtle m1 = m; m.moveTo(100,100,0); このときの m.getY() と m1.getY() の値は? 計算機プログラミングI (増原) 2003年度
値と変数 「変数は値をしまう箱」である 200 100 100 x y x y m m1 angle color int x = 100; int y = y; x = 200; このときのxとyの値は? Turtle m = new Turtle(200,200,0); Turtle m1 = m; m.moveTo(100,100,0); このときの m.getY() と m1.getY() の値は? 200 100 100 x y x y m m1 angle color 計算機プログラミングI (増原) 2003年度
値と変数 「変数は値をしまう箱」である x y m m1 angle color オブジェクト値の 場合、変数に しまわれるのは 「オブジェクトの 居場所」である 「参照」という Turtle m = new Turtle(200,200,0); Turtle m1 = m; m.moveTo(100,100,0); このときの m.getY() と m1.getY() の値は? x y m m1 angle color 計算機プログラミングI (増原) 2003年度
クラスメソッド (3.3) メソッドは「オブジェクトに対する指令」 であった。では、指令を出す対象がいない 場合は? 例: 2の平方根 xとyの大きい方 クラスメソッド ― 誰に対するでもない指令 計算機プログラミングI (増原) 2003年度
クラスメソッド (3.3) クラスメソッドの呼び出しの例 (普通は)大文字で始まる名前 オブジェクトに対するメソッド呼び出しとの区別 文法: Turtle.speedAll(1); // 全ての亀の速度を1にする System.exit(0); // プログラムを終了させる オブジェクトに対するメソッド呼び出しとの区別 m1.fd(10); //オブジェクトのメソッド呼び出し Turtle.speedAll(1); //クラスメソッドの呼び出し 文法: 【式】.【メソッド名】(【式】,…) 【クラス名】. 【メソッド名】(【式】,…) (普通は)大文字で始まる名前 計算機プログラミングI (増原) 2003年度
クラスメソッド (3.3) どうやってクラスメソッドを見つけるか? 仕様書を見る “static” と先頭に書かれているものが クラスメソッド 例 教科書p.12 Java言語標準ライブラリの仕様書 計算機プログラミングI (増原) 2003年度
クラス変数 クラスに1つずつしかない変数 インスタンス変数との区別 文法: 【変数名】 【式】.【変数名】 【クラス名】. 【変数名】 d = d / 2; //(ローカル)変数 m1.kameScale=1; //インスタンス変数 Turtle.withKameAll = false; //クラス変数 文法: 【変数名】 【式】.【変数名】 【クラス名】. 【変数名】 計算機プログラミングI (増原) 2003年度
クラス変数の使い途 数学定数の利用: Math.PI ―― 円周率 画面への出力 System.out.println(“x=” + x); インスタンスメソッドの呼び出し 数学定数の利用: Math.PI ―― 円周率 画面への出力 System.out.println(“x=” + x); 「“x=3”と 表示せよ」 ターミナルウィンドウを 表わすオブジェクトを しまうクラス変数 “x=”という文字列と x の値をつなげる (xが3のときは “x=3” になる等) System.out 計算機プログラミングI (増原) 2003年度
クラス変数の使い途 プログラムの意味に 関する誤りを見つける 代入した前後で 変数の値を表示する 式の値を表示することもできる import java.awt.Color; public class T23withPrint { public static void main(String[] args){ int d = 100, x, y, a; TurtleFrame f = new TurtleFrame(); Turtle m = new Turtle(200,300,0); f.add(m); m.fd(d); x = m.getX() y = m.getY(); a = m.getAngle() - 45; System.out.println(“a= “ + a); Turtle m1 = new Turtle(x, y, a); f.add(m1); m.kameColor = new Color(0,255,255); m.kameScale = m.kameScale * 2; m.rt(45); System.out.println(“d= “ + d); d = d / 2; m1.fd(d); System.out.println(“m1.getX()= “ + m1.getX()); } プログラムの意味に 関する誤りを見つける 代入した前後で 変数の値を表示する 式の値を表示することもできる 計算機プログラミングI (増原) 2003年度
式 (3.7) 式の例 180 x d / 2 x*x + y*y (x*x + y*y) / 2 Math.PI Math.random() m.getX() m.getX() / 2 new Turtle() (new Turtle()).getX() m.fd(10) “x =” true “x=” + x “m=” + m “x=” + x + “ m =” + m 計算機プログラミングI (増原) 2003年度
式 (3.8.1) 演算の例 i=i+1 i++ x=10 y = 3 + (x=10) (int)3.14 3 / 2 (double) 3 / 2 ((double) 3) / 2 (double) (3 / 2) Math.random()*100 int x; x = Math.random()*100; x = (int)(Math.random() * 100); m.fd(100) m.fd(3.14) m.fd((int)(3.14 * 100)) 計算機プログラミングI (増原) 2003年度
式 (3.8.3) true false 1==0 2 < 3 2 <= 2 1 != x !(1 == x) y % 4 == 0 y % 3 == 0 || y % 4 == 0 (y > 0 && y % 3 == 0) || y % 4 == 0 計算機プログラミングI (増原) 2003年度
変数の使い方 (例) コピー int 長さ = 100, 角度 = 30; ・・・長さと角度を使って図形を描く・・・ 長さ = 80; 角度 = 40; 長さ = 30; 角度 = 50; コピー 計算機プログラミングI (増原) 2003年度