コンピューターは様々なデータを扱います.そしてデータには幾つかの種類があります.この種類のことを「型」と言います. JAVAで使用できる「型」には次のものがあります.
分類 | 型名 | サイズ | 説明 |
---|---|---|---|
文字型 | char | 16bit | unicode文字 |
整数型 | int | 32bit | 整数(-2147483648〜2147483647) |
long | 64bit | 大きい整数(-9223372036854775808〜9223372036854775807) | |
short | 16bit | 小さい整数(-32768〜32767) | |
浮動小数点型 | double | 64bit | 高精度の小数点付き実数(±4.94065645841246544E-324 ~ ±1.79769313486231570E+308) |
float | 32bit | 小数点付き実数(±1.40239846E-45 ~ ±3.40282347E+38) | |
論理値型 | boolean | 8bit | 「真(true)」か「偽(false)」のいずれか |
バイト型 | byte | 8bit | 1byteのデータ(-128〜127) |
プログラムは,データの処理の仕方を記述するものです.プログラム中では,各データは「変数」という「名前の付いた箱」に入れて扱い,そのデータに対する処理は,変数に対して行う手続きとして記述します.
直接データを使用して1+2を計算するプログラムを3+4を計算するように変えるにはプログラム全体を書き換える必要がある.
しかし,変数 A,B,C を使用して記述しておけば,入力だけ変えればよい.
プログラム中で変数を使用する場合は,次のような手順にしたがって記述しなければなりません.
具体的な記述の仕方は以下のようになります.
変数をプログラム中で使用するためには,変数を使用した処理を記述する前に,使用するデータの「型」(種類)と「変数名」(変数の名前)を「宣言」(具体的に指定)しなければなりません.
また,変数の宣言は,その変数が使用されるプログラムが書かれたブロック(中括弧で囲まれた部分)の中に記述しなければなりません.詳しくは後に続く「変数のスコープ」の説明を読んで下さい.
変数の宣言をする事によって,設定した名前のついた,データを入れる箱がコンピューターの中に用意されると思って下さい.
宣言の仕方は,一般には次のように書きます.
型 変数名;
例えば,サイズが32bitの整数型「int」で,変数名が「seisu」の変数をを宣言するには以下のように記述します.
int seisu;
例として,前回の窓を作るプログラムに書き加えたとすると次のようになります.
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Group;
import javafx.scene.Scene;
public class FirstGui extends Application {
@Override
public void start(Stage stage) throws Exception{
Group root = new Group();
Scene scene = new Scene(root, 600, 300);
stage.setTitle("First GUI Application");
stage.setScene(scene);
stage.show();
int seisu;
}
public static void main(String[] args){
launch(args);
}
}
変数を宣言しただけでは,中に何も入っていません.プログラムの中で変数を使用するには,変数と実際のデータを結びつける必要があります.この操作を「代入」と言います. 代入によって,変数の箱にデータが入れられると思って下さい.
変数にデータを代入する時に注意しなければならない事は,必ずデータの「型」と同じ「型」の変数に入れることです.異なる型の変数に代入すると,データが変わってしまい正しく処理されません.
代入の仕方は次のように「=」を用いて書きます.「=」は「等しい」という意味ではなく「右側の値を左の変数に入力する」という意味なので間違えないように!.
変数 = 値 ;
例えば,上で宣言したint型変数「seisu」に整数「17」を代入するには以下のようにします.
seisu = 17;
上のプログラムに書き加えたとすると次のようになります.
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Group;
import javafx.scene.Scene;
public class FirstGui extends Application {
@Override
public void start(Stage stage) throws Exception{
Group root = new Group();
Scene scene = new Scene(root, 600, 300);
stage.setTitle("First GUI Application");
stage.setScene(scene);
stage.show();
int seisu;
seisu = 17;
}
public static void main(String[] args){
launch(args);
}
}
変数の中のデータを表示する方法は,前回で文字列を表示するのに使ったやり方(Labelを使う)と同じです.
次のように「Label」を作成して,Scene Graphに組み込みます.
Label label = new Label(表示したい文字列);
既出のように,直接表示したい文字列は「"」で囲んで表し,変数内のデータを表示したい場合は,変数名を文字列と「+」でつなげて書きます.
例えば,Labelの所を以下のように記述します.Labelの名前を「label1」にしています.
Label label1 = new Label("これは整数" + seisu + "です.");
上のプログラムに書き加えると,
import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Label; public class FirstGui extends Application { @Override public void start(Stage stage) throws Exception{ Group root = new Group(); Scene scene = new Scene(root, 600, 300); stage.setTitle("First GUI Application"); stage.setScene(scene); stage.show(); int seisu; seisu = 17; Label label1 = new Label("これは整数" + seisu + "です."); root.getChildren().addAll(label1); } public static void main(String[] args){ launch(args); } }
上の例と前回の練習問題を参考にして,「これは整数17です.」と,文字型変数を使用して「飆は『つむじかぜ』という漢字です.」と,浮動小数点型変数を使用して「円周率は3.14ぐらいです.」の3つを縦に並べて表示するプログラムを作ってみましょう.「17」,「飆」,「3.14」の所に変数を使用します.
クラス名は「Ex03_1」とします.
文字変数は1文字分の大きさで,入力する具体的な文字データは,次のように「'」で囲んで表します.
char a = '文';
また,「文字」と「文字列」は扱い方が違うので注意しましょう. 文字は1文字です.2文字以上は文字列です.(文字列については,後でやります.)
変数はプログラム内のどの場所で宣言されたかによって,使用できる有効範囲が異なります.この有効範囲のことを「変数のスコープ」と言います. 変数は宣言したブロック内でだけ有効で,宣言したブロックの外側から参照したり代入したりするとエラーになります.
public class クラス名 {
変数宣言 (メンバー変数:ここで宣言した変数は,クラス内の全てのメソッドから参照,代入できる.)public メソッド名(){ 変数宣言 (ここで宣言した変数は,メソッドの中からのみ参照,代入できる.)}{ 変数宣言 (ここで宣言した変数は,このブロック内でのみ参照,代入できる.) }}
変数には基本的に同じ型のデータしか代入できません.しかし,場合によっては別の型のデータを代入しなければならない状況も出てきます.その場合「キャスト」を使用して,データの型を別の型に変換する ことができます.
例えば,整数型で宣言した変数「i」のデータを倍精度実数型の変数「x」に代入する場合は以下のようにします.
x = (double)i; //整数型変数「i」のデータを倍精度実数型に変換して「x」に代入
数値データに対して次のような算術演算子が定義されています.
演算子 | 使用法 | 意味 |
---|---|---|
単項+ | +x | そのままの値を表す |
単項- | -x | 負の値を表す |
+ | x+y | 足し算を表す |
- | x-y | 引き算を表す |
* | x*y | かけ算を表す |
/ | x/y | わり算を表す |
% | x%y | 剰余(割った余り)を表す |
特殊な演算子として,以下のものも用意されています.
増分・減分演算子 | 複合代入演算子 | ||||||
---|---|---|---|---|---|---|---|
演算の種類 | 使用法 | 同じ意味の式 | 変数の値 | 演算の種類 | 使用法 | 同じ意味の式 | |
前置増分 | ++x | x = x + 1 | 増分後の値 | 足し算の結果を代入 | x += a | x = x + a | |
後置増分 | x++ | x = x + 1 | 増分前の値 | 引き算の結果を代入 | x -= a | x = x - a | |
前置減分 | --x | x = x - 1 | 減分後の値 | かけ算の結果を代入 | x *= a | x = x*a | |
後置減分 | x-- | x = x - 1 | 減分前の値 | わり算の結果を代入 | x /= a | x = x/a | |
剰余の結果を代入 | x %= a | x = x%a |
2つの整数の和と差を計算して表示するプログラムを作ってみましょう.クラス名は「UseValue」にしてあります.
import javafx.application.Application; import javafx.geometry.Pos; import javafx.geometry.Insets; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.layout.VBox; import javafx.scene.control.Label; public class UseValue extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) throws Exception { stage.setTitle("Application UseValue"); VBox root = new VBox(); root.setAlignment(Pos.CENTER_LEFT); root.setPadding(new Insets(10,10,10,10)); root.setSpacing(2.0); int x1 = 27; int x2 = 7; int wa,sa; wa = x1+x2; sa = x1-x2; Label label1 = new Label(x1 + "+" + x2 + "=" + wa); Label label2 = new Label(x1 + "-" + x2 + "=" + sa); root.getChildren().addAll(label1,label2); Scene scene = new Scene(root,200,200); stage.setScene(scene); stage.show(); } }
演算する時,特に「わり算」をする時には「変数の型」に気をつけなければなりません. 整数型同士で割り算した場合,答えも整数になります.
わり算の答えを小数点以下まで出したい場合は,「double型」または「float型」で宣言した変数を用いなければなりません.
整数型同士のわり算で,小数点以下の答えを出したい場合は,前述の「キャスト」を使用して,実数型に変換します.
jissu = (double)seisu1/seisu2; //整数型の「seisu1,2」の結果を倍精度実数型に変更
基本的な演算以外に数学の関数も使用できます.Javaに組み込まれている代表的な数学関数には次のようなものがあります.
関数 | 説明 | 関数 | 説明 | |
---|---|---|---|---|
abs(x) | xの絶対値 | sqrt(x) | 平方根 | |
sin(x) | 三角関数:\(\sin{x}\) | exp(x) | 指数関数:\(e^x\) | |
cos(x) | 三角関数:\(\cos{x}\) | log(x) | 自然対数:\(\log{x}\) | |
tan(x) | 三角関数:\(\tan{x}\) | log10(x) | 常用対数:\(\log_{10}{x}\) | |
asin(x) | 逆三角関数:\(\arcsin{x}\) | pow(x,y) | べき乗:\(x^y\) | |
acos(x) | 逆三角関数:\(\arccos{x}\) | round(x) | 四捨五入 | |
atan(x) | 逆三角関数:\(\arctan{x}\) | random() | 0.0〜1.0の乱数 |
使用するときは,Math.関数 のように記述します.
上のプログラムを参考にして,整数型と浮動小数点型の変数をいくつか用意し,それらに様々な演算や関数を使用した結果を表示するプログラムを作ってみましょう.
特に,変数の値を別の変数に代入:x2 = x1;
普通の数式には現れない書き方:x1 = x1 + 1;
などを使用して,変数の値がどのように変化するかを試し,なぜそうなるのか考えてみましょう.
クラス名は「Ex03_2」とせよ.
複数の同じようなデータがある場合に,それぞれに異なった変数を用いるのは大変です.こういった場合,「配列」と言うものを用いることができます. 「配列」とは,背番号付きの変数のようなもので,宣言するときは「配列名」と「要素数」を指定します.
具体的な配列の宣言は,次のように変数型の後ろに「[]」をつけて宣言します.また,要素数は「new」演算子で設定します.
int[] tensu(変数名) = new int[5(要素数)];
宣言する時の括弧([])の数を増やすことで,2次元,3次元の配列を作ることも出来ます.
英国数理社の5科目の試験の平均点を計算して表示するプログラムを作ってみます.
/******************************************
配列の例:成績
******************************************/ import javafx.application.Application; import javafx.geometry.Pos; import javafx.geometry.Insets; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.layout.VBox; import javafx.scene.control.Label; public class Seiseki extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) throws Exception { stage.setTitle("Application Seiseki"); VBox root = new VBox(); root.setAlignment(Pos.CENTER_LEFT); root.setPadding(new Insets(10,10,10,10)); root.setSpacing(2.0); int[] tensu = new int[5]; int total; double ave; int i; //得点の代入 tensu[0] = 72; //英語 tensu[1] = 75; //国語 tensu[2] = 88; //数学 tensu[3] = 79; //理科 tensu[4] = 68; //社会 //合計と平均の計算 total = 0; //合計の初期化 i = 0; //カウンタの初期化 total += tensu[0]; //英語を積算 i++; //科目数追加 total += tensu[1]; //国語を積算 i++; //科目数追加 total += tensu[2]; //数学を積算 i++; //科目数追加 total += tensu[3]; //理科を積算 i++; //科目数追加 total += tensu[4]; //社会を積算 i++; //科目数追加 ave = (double)total/i; //整数型のわり算の結果を倍精度実数型に変更 //データの表示 Label label1 = new Label("英語:" + tensu[0]); Label label2 = new Label("国語:" + tensu[1]); Label label3 = new Label("数学:" + tensu[2]); Label label4 = new Label("理科:" + tensu[3]); Label label5 = new Label("社会:" + tensu[4]); Label label6 = new Label("合計:" + total); Label label7 = new Label("平均:" + ave); root.getChildren().addAll(label1,label2,label3,label4,label5,label6,label7); Scene scene = new Scene(root,200,300); stage.setScene(scene); stage.show(); } }
次のようにすると,配列の宣言と初期化の時に,点数の代入を一度に行うこともできます.
int[] tensu = {72,75,88,79,68};
合計を計算する時,配列要素の番号を直接書く代わりに,カウンタ変数を使うことができます.
total += tensu[i]; //英語を積算 i++; //科目数追加 total += tensu[i]; //国語を積算 i++; //科目数追加 total += tensu[i]; //数学を積算 i++; //科目数追加 total += tensu[i]; //理科を積算 i++; //科目数追加 total += tensu[i]; //社会を積算 i++; //科目数追加
上のプログラムを,別の書き方を使って作ってみましょう.クラス名は「Ex03_3」とせよ.