このブログを検索

2019年8月27日火曜日

アホ男子のための 割り算 問題 学習プログラム(作成中)⑥

 アホ男子 の為の 割り算学習プログラム。
 とりあえず、5回問題を回答させて、
 最後に 結果を出したい。 

 クラス変数 static int count = 1; (1 〜 5問 出題をする)
 でもって、if(count <= 5) MyWindow(); //5回で終了。
 
 失敗! エラー: シンボルを見つけられません
 
 ボケーっと 口を開けて ふらふら歩いている時、
 突如 気が付いた。
 ラベルを書き直したら 良いのではないかと!!

 わかった事。
 MyWindow() メソッドではなく、
 questions() メソッド で ラベルを書き換えれば良い。
 また、ラベルを書き換えるのは la.setText(  ); を使用する。



⭐️5回表示のプログラム

//◯次は 合否判定をしてみよう。メソッドを作る。System.out.println()にて出力
//◯Buttonに合否判定を反映
//◯間違いを作ろう(あまり)
//◯間違いを作ろう(商)
//5回出題させてみよう
import java.awt.*;
import java.awt.event.*;
class Times2{
    public static void main(String[] args){
        MyWindow mw = new MyWindow();
    }
}

class MyWindow extends Frame implements ActionListener{
    Label la;
    Button btn1, btn2;
    int moto; //割られる数値です。
    int waru; //割る数値です。
    int ans; //答え
    int amari; //答え(あまり)
    static int count = 1;
    static int seikai;
    MyWindow(){
        setTitle("問題集");
        setSize(640, 400);
        setLayout(null); //レイアウトの解除
        btn1 = new Button("◯");
        btn2 = new Button("×");
        btn1.setBounds(100, 300, 150, 80);
        btn2.setBounds(400, 300, 150, 80);
        btn1.addActionListener(this);
        btn2.addActionListener(this);
        add(btn1);
        add(btn2);
        la = new Label( questions() );
        la.setFont(new Font("Serif", Font.PLAIN, 34));
        la.setAlignment(Label.CENTER);
        la.setBackground(Color.LIGHT_GRAY); //Label 背景色
        la.setForeground(Color.BLACK);  //Label 文字色
        la.setBounds(100, 100, 450, 50);
        add(la);
        setVisible(true);
        addWindowListener( new WinListener() );
    }
    
    public String questions(){
        waru = (int)(Math.random()*29)+2; //割る数値(2〜30)
        ans = (int)(Math.random()*9)+1; //答え(1〜9)
        amari = (int)(Math.random()*(waru-1))+1; //あまりの数値(1〜割る数値−1)
        moto = waru * ans + amari; //割られる数値
        System.out.println(moto + " ÷ " + waru + " = " + ans + " ... " + amari);//験算用
        
        int ran1 = (int)(Math.random()*2); //間違いの発生 確率50% ただし 変数に0を加算する事もある。
        if(ran1 == 0){
            int ran2 = (int)(Math.random()*3);
            if(ran2 == 0){
                int falseAmari = (int)(Math.random()*3);
                falseAmari -= 1;
                amari = amari + falseAmari; // あまりに -1,0,1 を加算
            }
            else{
                int falsewaru = (int)(Math.random()*2);
                ans = ans + falsewaru; // 商に 0,1 を加算
            }
        }
            
        return moto + " ÷ " + waru + " = " + ans + " ... " + amari;
    }
    
    public boolean judgment(){
        return moto/waru==ans && moto%waru==amari; //答えと 余りの判定。booleanにて返す。
    }
    
    
    public void actionPerformed(ActionEvent e){
        if(e.getSource() == btn1) {
            System.out.println("◯ を押しました" + judgment()); //験算用
            if(judgment() == true){
                btn1.setLabel("正解 !");
                countCalculation();
            }
            else{
                btn1.setLabel("違っているよ !");
                countCalculation();
            }
        }
        if(e.getSource() == btn2) {
            System.out.println("× を押しました" + judgment()); //験算用
            if(judgment() == false){
                btn2.setLabel("正解 !");
                countCalculation();
            }
            else{
                btn2.setLabel("違っているよ !");
                countCalculation();
            }
        }
    }
    
    public void countCalculation(){
        System.out.println(count + "回目でした。"); //試験用
        count++;
        //try{ sleep(2000); } catch(InterruptedException e) {} //2秒間処理を停止
        if(count <= 5){  //5回で終了。
            btn1.setLabel("◯");  //ボタンの表示の書き換え
            btn2.setLabel("×");  //ボタンの表示の書き換え
            la.setText( questions() ); //ラベルの表示の書き換え questions() メソッドへ
        }
        else{
            System.out.println("お疲れ様でした。");
        }
    }
}

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

}

今後、修正したい部分。
 ボタンの表示が「正解」「違っているよ!」から
 「◯」「×」 に戻そうとすると 「正解」等が表示されない。
 (実際には 表示しているけど 見えない。)
 sleep() メソッドを使って 処理を停止したいけど、
 うまく使えない。
 スレッドか〜〜〜!!


今日の教訓
 たまには ぼーっと歩いてみよう。

0 件のコメント:

コメントを投稿