このブログを検索

2019年8月26日月曜日

Java入門教室 Chapter10「図形を描こう」④

「Java入門教室」

 Chapter10「図形を描こう」
 でもって、ポチポチっと 色を変更させた後、
 残った重複部分を 入力専用のメソッドに置き換えてみた。


⭐️重複部分を 1つのメソッドに置き換えてみた。

// 改良点
// ◯重複部分を修正する。

// 注意事項 Colorクラスの変数により 色の設定ができる。
// 注意事項 返り値は Color。
// 注意事項 return で 色を返す時には "" は不要。
// 注意事項 return で返す時には switch 分の場合は break; は不要。
import java.awt.*;
import java.awt.event.*;
import java.io.*;

class Line2{
    public static void main(String[] args) throws IOException{
        MyWindow mw = new MyWindow();
    }
}

class MyWindow extends Frame{
    //フィールドの作成
    int startX;  // 始点X
    int startY;  // 始点Y
    int endX;    // 終点X
    int endY;    // 終点Y
    Color col;   // Colorクラスの変数
    
    MyWindow(){
        System.out.println("直線を引きます。始点と終点を入力して下さい。");
        startX = inputNum("始点 X点は? (20 ~ 380 までの数値で)  "); //引数を与えて input()メソッドを呼び出す。
        startY = inputNum("始点 Y点は? (20 ~ 380 までの数値で)  ");
        endX = inputNum("終点 X点は? (20 ~ 380 までの数値で)  ");
        endY = inputNum("終点 Y点は? (20 ~ 380 までの数値で)  ");
        col = inputCol("色は? 1)BLACK 2)BLUE 3)RED 4)GREEN  ");
        
        setTitle("図形を描く");
        setSize(400, 400);
        setVisible(true);
        addWindowListener(new WinListener());
        
    }
    public void paint(Graphics g){
        g.setColor( col );
        g.drawLine(startX, startY, endX, endY);
    }
    public static int inputNum(String txt){ //start end の数値の入力
        System.out.print(txt); //引数 txt の表示
        int num = input();
        if(num >= 20 && num <= 380){ //入力した数値が 20~380の範囲内であるのか確認
            return num;
        }
        else{
            System.out.println("範囲を超えている もしくは数値以外が入力された為、200を代入します。");
            return 200;
        }
    }
    
    public static Color inputCol(String txt){ //注意 返り値は Color
        System.out.print(txt); //引数 txt の表示
        int colorNum = input();
        if(colorNum == -9999){
            System.out.println("数値以外が入力されました。 1)BLACK 色に指定します。");
            colorNum = 1;
        }
        
        switch(colorNum){
            case 1:
                return Color.BLACK; // 注意””は不要!
            case 2:                 // 注意 break; は不要!
                return Color.BLUE;
            case 3:
                return Color.RED;
            case 4:
                return Color.GREEN;
            default:
                System.out.println("1~4 以外の数値が入力されました。1)BLACK 色に指定します。");
                return Color.BLACK;
        }
    }
    
    public static int input(){ //数値の入力のみのメソッド
        
        BufferedReader br =
         new BufferedReader(new InputStreamReader(System.in));
        String str = null;
        
        try{
            str = br.readLine();
        }catch(IOException e){
            System.out.println(e);
        }
        
        try{
            return Integer.parseInt(str);
        }
        catch(Exception e){
            return -9999;//数値以外の際 -9999 を返す。
        }
    }
}

class WinListener extends WindowAdapter{
    public void windowClosing(WindowEvent e){System.exit(0);}

}

 このプログラム、数値以外の入力の際 -9999 を返すことによって
 返し先のメソッドで 判断を委ねているのですが、
 この処理を もっとスマートにできないものか。。。

今日の教訓
 この本 もう一度 最初から 打ち直してみよう。

0 件のコメント:

コメントを投稿