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 件のコメント:
コメントを投稿