このブログを検索

2019年8月24日土曜日

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

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

 はて、どうしたら良いんだろう。
 考えてみた方法、
 クラス変数 static int count = 1; (1 〜 5問 出題をする)
 でもって、if(count <= 5) MyWindow(); //5回で終了。
 にして 再度 問題を出すようにする。
 と、考えた。
 
 失敗! エラー: シンボルを見つけられません 
 
 何か 良い方法は無いものか。。。



⭐️失敗プログラム← エラーが出ます(今後 改良出来る様にするのだ)

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

class MyWindow extends Frame implements ActionListener{
    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);
        Label 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++;
        if(count <= 5) MyWindow(); //5回で終了。
        else{
            System.out.println("お疲れ様でした。");
        }
    }
}

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

}



今日の教訓
 どうすれば、繰り返し処理が出来るのだろうか。。。

2019年8月23日金曜日

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

🌟アホ男子 のための 割り算 問題プログラムを作ってみよう

 ランダムを使って 二桁で割る 割り算を作ってみた。(出来た!!)
 
 今度は ランダムを発生させて
 余りに -1、0、+1 を加算。
 商に -1、0 を加算。
 合っているのか、間違えているのかを  boolean のメソッドで
 判断をする様にした。






//◯ランダムに出題できるようにしよう(過去のプログラム参照)
//◯次は 合否判定をしてみよう。メソッドを作る。System.out.println()にて出力
//◯Buttonに合否判定を反映
//◯間違いを作ろう(あまり)
//◯間違いを作ろう(商)
import java.awt.*;
import java.awt.event.*;
class False2{
    public static void main(String[] args){
        MyWindow mw = new MyWindow();
    }
}

class MyWindow extends Frame implements ActionListener{
    Button btn1, btn2;
    int moto; //割られる数値です。
    int waru; //割る数値です。
    int ans; //答え
    int amari; //答え(あまり)
    //String mondai = questions();  //他のメソッドから代入
    //boolean bool = judgment();
    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);
        Label 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にて返す。
        //return moto/waru==ans && moto%waru +1 ==amari; //答えと 余りの判定(false用)。
    }
    
    
    public void actionPerformed(ActionEvent e){
        if(e.getSource() == btn1) {
            System.out.println("◯ を押しました" + judgment());
            if(judgment() == true) btn1.setLabel("正解 !"); //メソッドに移動
            else btn1.setLabel("違っているよ !");
        }
        if(e.getSource() == btn2) {
            System.out.println("× を押しました" + judgment());
            if(judgment() == false) btn2.setLabel("正解 !");
            else btn2.setLabel("違っているよ !");
        }
    }
}

class WinListener extends WindowAdapter{
    public void windowClosing(WindowEvent e){System.exit(0);}
}
        
次は、5回 出題する様に 変更してみよう。

今日の教訓
 5回 出題するには どうすれば いいんだろう。。。

2019年8月22日木曜日

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

🌟アホ男子 のための 割り算 問題プログラムを作ってみよう

 ランダムを使って 二桁で割る 割り算を作ってみた。(出来た!!)
 今度は judgment()メソッドを使って (返り値は boolean)にて判定。
 返り値が boolean のメソッドは Progate の Javaクラスで
 初めて知ったもの。
 これ、本当に便利だ。




// ◯数値を文字列に直して表示しよう。← 変数にしてみよう
//◯ランダムに出題できるようにしよう(過去のプログラム参照)
//◯次は 合否判定をしてみよう。メソッドを作る。System.out.println()にて出力
//Buttonに合否判定を反映
import java.awt.*;
import java.awt.event.*;
class Main8{
    public static void main(String[] args){
        MyWindow mw = new MyWindow();
    }
}

class MyWindow extends Frame implements ActionListener{
    Button btn1, btn2;
    int moto; //割られる数値です。
    int waru; //割る数値です。
    int ans; //答え
    int amari; //答え(あまり)
    //String mondai = questions();  //他のメソッドから代入
    //boolean bool = judgment();
    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);
        Label 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; //割られる数値
        return moto + " ÷ " + waru + " = " + ans + " ... " + amari;
    }
    
    public boolean judgment(){
        return moto/waru==ans && moto%waru==amari; //答えと 余りの判定。booleanにて返す。
        //return moto/waru==ans && moto%waru +1 ==amari; //答えと 余りの判定(false用)。
    }
    
    
    public void actionPerformed(ActionEvent e){
        if(e.getSource() == btn1) {
            System.out.println("◯ を押しました" + judgment());
            if(judgment() == true) btn1.setLabel("正解 !"); //メソッドで判定
            else btn1.setLabel("違っているよ !");
        }
        if(e.getSource() == btn2) {
            System.out.println("× を押しました" + judgment());
            if(judgment() == false) btn2.setLabel("正解 !");
            else btn2.setLabel("違っているよ !");
        }
    }
}

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

}

        
次は、間違えを作ってみよう。

今日の教訓
 オレ、こんなプログラムを書ける様になったんだ。
 ビックリだ。

2019年8月20日火曜日

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

🌟アホ男子 のための 割り算 問題プログラムを作ってみよう

 ランダムを使って 二桁で割る 割り算を作ってみた。

// 数値を文字列に直して表示しよう。← 変数にしてみよう
//ランダムに出題できるようにしよう(過去のプログラム参照)
//次は 合否判定をしてみよう。
import java.awt.*;
import java.awt.event.*;
class Main6{
    public static void main(String[] args){
        MyWindow mw = new MyWindow();
    }
}

class MyWindow extends Frame implements ActionListener{
    Button btn1, btn2;
    String mondai = questions();  //他のメソッドから代入
    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);
        Label la = new Label(mondai);
        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(){
        int moto; //割られる数値です。
        int waru; //割る数値です。
        int ans; //答え
        int amari; //答え(あまり)
        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; //割られる数値
        return moto + " ÷ " + waru + " = " + ans + " ... " + amari;
    }
    
    
    public void actionPerformed(ActionEvent e){
        if(e.getSource() == btn1) {
            System.out.println("◯ を押しました");
            btn1.setLabel("正解 !");
        }
        if(e.getSource() == btn2) {
            System.out.println("× を押しました");
            btn2.setLabel("違っているよ !");
        }
    }
}

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

}

        
次は、boolean を返り値にした メソッドを使用して 合否判定をしてみよう。

今日の教訓
 息子の宿題を色々 見ているうちに、
 最近は さんすう に詳しくなりました。

2019年8月19日月曜日

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

🌟アホ男子 のための 割り算 問題プログラムを作ってみよう

 まずは、レイアウトと ボタンの反応のみを作成。

// とりあえず問題を1問出してみよう
import java.awt.*;
import java.awt.event.*;
class Main4{
    public static void main(String[] args){
        MyWindow mw = new MyWindow();
    }
}

class MyWindow extends Frame implements ActionListener{
    Button btn1, btn2;
    String mondai = questions();  //他のメソッドから代入
    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);
        Label la = new Label(mondai);
        la.setFont(new Font("Serif", Font.PLAIN, 32));
        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(){
        return "65 ÷ 21 = 3...2";
    }
    
    
    public void actionPerformed(ActionEvent e){
        if(e.getSource() == btn1) {
            System.out.println("◯ を押しました");
            btn1.setLabel("正解 !");
        }
        if(e.getSource() == btn2) {
            System.out.println("× を押しました");
            btn2.setLabel("違っているよ !");
        }
    }
}

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

}

        

今回は 問題はまだ1問だけ
次は ランダムで問題を作ってみよう。
「◯」「×」形式にしたのは 社会や 国語にも応用できるから。
あと、掛け算だと 数字の入力の方がやりやすいけど、
あまりがあると、入力方法がどうしたら良いのか解らないってところ。

今日の教訓
 まずは色々やってみるのだ。

2019年7月29日月曜日

Java入門教室 Chapter10「ボタンをクリックしたときに反応する」

「Java入門教室」

Chapter10「ボタンをクリックしたときに反応する」(Sample1004)
 ボタンをクリックした際に、「<<<ボタン1>>>」→「ボタン1をクリックした」
 とボタンのLabelの変更の処理。

 このボタンのLabelを 何回押したのか表示できるように 変更したい。
 やってみた。

⭐️Sample1004

import java.awt.*;
import java.awt.event.*;
class Main{
    public static void main(String[] args){
        MyWindow mw = new MyWindow();
    }
}

class MyWindow extends Frame implements ActionListener{
    Button btn1, btn2, btn3;
    static int btnH1 = 1;
    static int btnH2 = 1;
    static int btnH3 = 1;
    MyWindow(){
        setTitle("ボタンを判定する");
        setSize(300, 200);
        setLayout(new FlowLayout());
        btn1 = new Button("<<ボタン 1>>");
        btn1.addActionListener(this);
        add(btn1);
        btn2 = new Button("<<ボタン 2>>");
        btn2.addActionListener(this);
        add(btn2);
        btn3 = new Button("<<ボタン 3>>");
        btn3.addActionListener(this);
        add(btn3);
        setVisible(true);
        addWindowListener(new WinListener());
    }
    
    public void actionPerformed(ActionEvent e){
        if(e.getSource() == btn1){
            btn1.setLabel("ボタン1→ " + btnH1 + " 回");
            btnH1++;
        }
        if(e.getSource() == btn2){
            btn2.setLabel("ボタン2→ " + btnH2 + " 回");
            btnH2++;
        }
        if(e.getSource() == btn3){
            btn3.setLabel("ボタン3→ " + btnH3 + " 回");
            btnH3++;
        }
    }
}

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

}


↓手間取ったところ
 ボタンを何回クリックしたのか カウントする変数。
 btnH1、btnH2、btnH3の変数を クラス変数にしないと
 クリックした際の カウントが 常に初期化してしまう事。

今日の教訓
 とりあえず、やってみた。

2019年7月12日金曜日

前回の テキストプログラムを 修正。

 前回のテキスト出力プログラム を修正しました。

 前回は、初めに 何行の文章を入力しないと 入力出来ないとゆう
 トホホな 仕様で あったモノを 「END」を入力すると記入したものを、
 txt に出力するものに改良。

 初心者なので 引っかかった所は、
 if(str == "END") break; では while(true){
 の無限ループを break する事が出来ない事。
 正しくは、if(str.equals("END")) break; 

🌟前回のテキスト出力プログラムを 変更


//ファイルに出力するプログラムを作ろう。
//何行 入力しますか ← やめる
//文字を入力させて → 「END」を入力すると 入力終了
//その文字をファイルに出力
import java.io.*;

class SampleP462_3
{
    static String output_sentence; //クラス変数 出力時 出力文書
    
    public static void main(String[] args)
    {
        output_sentence = sentence(); // output_sentence クラス変数 文字入力のメソッドに移動
        System.out.println("sakubunn.txt に 出力をしました。");
        output();    //テキスト出力メソッドに移動
    }
    public static String sentence() //行の文字の入力 → inputにて入力作業 → クラス変数に返す
    {
        String str_t = ""; //統合用変数
        String str = "";
        int num = 1;       //ループ用変数(行数)
        while(true){       //while(true)は無限ループ
            str = input(num + "行目の入力です。 END(半角大文字) にて入力終了"); //inputメソッにて入力作業
            str_t += str + "\n";  //文字の統合
            num++;//行数++
            if(str.equals("END")) break;  //"END"を記入すると無限ループからbreak
            //if(str == "END") break;  //という記述は間違い
        }
        return str_t;
    }
    public static String input(String txt)  //入力メソッド(汎用) Stringで返す。
    {
        System.out.println(txt);     //txt(コメント)を表示
        BufferedReader br =                        //入力処理
         new BufferedReader(new InputStreamReader(System.in));
        String str = null;               //変数 str はこのメソッドのみ有効
        try{
            str = br.readLine();
        }
        catch(IOException e){
            System.out.println(e);
        }
        return str;
    }
    public static void output(){
        try{
            FileWriter fw = new FileWriter("sakubunn.txt");
            fw.write(output_sentence);
            fw.close();
        }
        catch(IOException e){
            System.out.println("ファイルが書き込めません。");
        }
    }

}

はてはて、今度は もっと アホ男子が喜びそうな、
プログラムに改良してみよう。

今日の教訓
 面白いモノを作ってみよう。