スケジュール前のページJavaの基礎2

JAVAの基礎3

選択構造3:SWITCH文

一度に多数の分岐をさせたい時には「SWITCH文」が使用できます.

SWITCH文の構造1

「SWITCH文」は一般に次のような構造をしています.

switch(評価式){
case 定数式1 : 文1
case 定数式2 : 文2



case 定数式n : 文n
default : 文n+1
}

「評価式」と「定数式」は「byte型,short型,int型,char型」または「String」が値に成るように設定します.こうすると,「評価式」と同じ値を取る「case」以降の「文」が全て実 行されます.「default」には全ての「case」にあてはまらない場合の処理を書きます.

SWITCH文の構造2

「SWITCH文」だけでは「評価式」と一致した「case」以降の全ての「文」が実行されてしまいますが,一致した「case」の「文」だけが実 行されるようにすることができます.

switch(評価式){
case 定数式1 : 文1
break;
case 定数式2 : 文2
break;



case 定数式n : 文n
break;
default : 文n+1
}

上記のように各caseの最後に「break文」を入れると,「評価式」と一致した「case」の「文」が実行されると「break文」によって 「switch文」全体を終了します.

入力した値に応じて表示が変わるプログラムを作ってみましょう.

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;

public class FirstSW extends Application{
	
    public static void main(String[] args) {
        launch(args);
    }
    
    TextField tf1 = new TextField();
    TextField tf2 = new TextField();
    Label label1 = new Label("整数を半角で入力して下さい");
    Label label2 = new Label("月を日本語で入力して下さい(1月etc.)");
    Label label3 = new Label();
    Label label4 =new Label();
 
    @Override
    public void start(Stage stage) throws Exception {
    	
    	stage.setTitle("Application FirstSW");
    	
    	//root Node を作成
    	VBox root = new VBox();
    	
    	//root の設定
    	root.setAlignment(Pos.CENTER);
    	root.setPadding(new Insets(10,10,10,10));
    	root.setSpacing(10.0);
    	
    	//pane1 を作成
    	HBox pane1 = new HBox();
    	
    	//pane1 の設定
    	pane1.setAlignment(Pos.CENTER_LEFT);
    	pane1.setPadding(new Insets(10,10,10,10));
    	pane1.setSpacing(5.0);
    	
    	//paine2 の作成
    	HBox pane2 = new HBox();
    	
    	//pane2 の設定
    	pane2.setAlignment(Pos.CENTER_LEFT);
    	pane2.setPadding(new Insets(10,10,10,10));
    	pane2.setSpacing(5.0);
    	
    	//テキストフィールドの設定
    	tf1.setAlignment(Pos.CENTER_RIGHT);
    	tf1.setMaxWidth(50);
    	tf2.setAlignment(Pos.CENTER_RIGHT);
    	tf2.setMaxWidth(50);
    	
    	//pane1, pane2 にラベルとテキストフィールドを組み込む
    	pane1.getChildren().addAll(label1,tf1);
    	pane2.getChildren().addAll(label2,tf2);
    	
    	//イベント処理
    	tf1.setOnAction(event -> updateText());
    	tf2.setOnAction(event -> updateText());
    	
    	//root に pane1, pane2 を組み込む
    	root.getChildren().addAll(pane1,label3,pane2,label4);
    	
    	//Scene の作成
    	Scene scene = new Scene(root,400,200);
    	
    	//Scene を Stage に組み込む
    	stage.setScene(scene);
    	//Stageの表示
    	stage.show();
    }
    
    //updateTextメソッドの定義
    private void updateText() {
    	String s = tf1.getText();
    	int n = Integer.parseInt(s);
    	String month = tf2.getText();

	//switch文1(評価式が整数値)
	switch(n%4){
		case 0: label3.setText("あなたは0の仲間を入力しました.");
			break;
		case 1: label3.setText("あなたは1の仲間を入力しました.");
			break;
		case 2: label3.setText("あなたは2の仲間を入力しました.");
			break;
		case 3: label3.setText("あなたは3の仲間を入力しました.");
			break;
		default: label3.setText("整数を入力して下さい.");
	}
	
	//switch文2(評価式が文字列)
	switch(month){
		case "1月": label4.setText("睦月(むつき)");
			break;
		case "2月": label4.setText("如月(きさらぎ)");
			break;
		case "3月": label4.setText("弥生(やよい)");
			break;
		case "4月": label4.setText("卯月(うづき)");
			break;
		case "5月": label4.setText("皐月(さつき)");
			break;
		case "6月": label4.setText("水無月(みなつき)");
			break;
		case "7月": label4.setText("文月(ふみづき)");
			break;
		case "8月": label4.setText("葉月(はづき)");
			break;
		case "9月": label4.setText("長月(ながつき)");
			break;
		case "10月": label4.setText("神無月(かんなづき)");
			break;
		case "11月": label4.setText("霜月(しもつき)");
			break;
		case "12月": label4.setText("師走(しわす)");
			break;
		default: label4.setText("月を入力して下さい.");
	}
    	
    	
    }
 

}

練習問題6ー1

上のプログラムを参考にして次のどちらかのプログラムを作成して実行してみましょう.

  1. 漢字で月名(一月など)を入力すると,英語の月名が表示されるプログラムを作ってみましょう.クラス名は「Ex06_1a」とする.
  2. 誕生日を入力するとその人の星座が表示されるようなプログラムを作ってみましょう.クラス名は「Ex06_1b」とする.
    誕生日の入力の仕方は,入力欄を2つ作って,それぞれに誕生月,誕生日を「数値」で入れてもらいましょう.

練習問題6ー2(オプション)

入力欄を3つ作り,それぞれに西暦の年月日を入力すると,その日の曜日が表示されるプログラムを作ってみる.クラス名は「Ex06_2」とする.

現在使用されている西暦は,1582年2月24日に発布されたグレゴリオ暦で,1582年10月15日を金曜日と定められている.これ以降の曜日は以下のツェラーの公式で計算できる.

\(y\)を年,\(m\)を月(ただし,1月と2月は前年の13月と14月とする,つまり2014年1月1日は2013年13月1日とする),\(d\)を日として, \[ h = \left( 5C + Y + \left[\frac{Y}{4}\right] + \left[\frac{C}{4}\right] + \left[\frac{26(m+1)}{10}\right] + d \right)\ {\rm mod}\ 7 \] ここで\(C = \left[\frac{y}{100}\right]\):\([x]\)は\(x\)以下の最大の整数を表す,\(Y = y\ {\rm mod}\ 100\):\(x\ {\rm mod}\ y\)は\(x\)を\(y\)で割った余りを表す.

この式の値 h が0,1,2,3,4,5,6のとき,それぞれ土曜,日曜,月曜,火曜,水曜,木曜,金曜となる.

スケジュール前のページJavaの基礎2