動手動腦01(續)

元始天尊123發表於2024-09-28

動手動腦01(續)

字串加法

原始碼

public class Test {
    public static void main(String[] args) {
        int X=100;
        int Y=200;
        System.out.println("X+Y="+X+Y);
        System.out.println(X+Y+"=X+Y");

    }
}

執行結果

結果分析

由於加法從左向右計算,第一行先計算為字串加法,即將整數拼接到欄位串上.第二行為先進行整數加法,然後進行拼接操作

出30道題

原始碼

import java.util.Random;

public class AskQuestion {
    final int NUMBER_OF_QUESTIONS=30;
    boolean [][][]st=new boolean[501][501][4];
    Random r=new Random();
    String operation="+-*/";
    public  AskQuestion(){
        int cnt=0;
        while(cnt<NUMBER_OF_QUESTIONS){
            int a=r.nextInt(500);
            int b=r.nextInt(500)+1;
            int o=r.nextInt(4);
            char operat=operation.charAt(o);
            if(st[a][b][o])continue;
            st[a][b][o]=true;
            System.out.println(a+" "+operat+" "+b+" "+"= ");
            cnt++;
        }

    }
}

原始碼分析

 (1)使用NUMBER_OF_QUESTIONS,來設定題目的數量,便於以後的維護
 (2)是用三維的boolean陣列來記錄每一種可能出現的題目的狀態,為false,為沒出過,true為已經出過,第一維度表示第一個數,第二維度表示第二個數,第三維度表示加減乘除.這樣做在空間上上覆雜度提高很多,但是時間上會快很多,如果可以我想用hash表,這樣可以大大降低空間複雜度,但是本人不會手搓hash,java又沒有stl.
 (3)在建構函式中出題,在測試類中直接建立變數就可以出題了,也可以給函式寫成成靜態函式,讓這個類變成一個工具類.

結果展示

一共三十道題目而且沒有重複

獲取驗證碼

原始碼展示

import javax.sound.midi.Soundbank;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;

public class Password extends JFrame implements KeyListener , ActionListener
{
   Random r=new Random();
    String s=new String();
    JButton logIn=new JButton("登入");
    JTextField registerText=new JTextField();
    JButton res=new JButton();
    Password(){
        //初始化介面
        initJFrame();
        //初始化影像
        initView();
        //讓當前介面顯示出來
        this.setVisible(true);

    }
    public void initJFrame() {
        this.setSize(488, 430);//設定寬高
        this.setTitle("拼圖遊戲 V1.0登入");//設定標題
        this.setDefaultCloseOperation(3);//設定關閉模式
        this.setLocationRelativeTo(null);//居中
        this.setAlwaysOnTop(true);//置頂
        this.setLayout(null);//取消內部預設佈局
    }
    public void initView(){
        //使用者名稱
        JLabel userNametext=new JLabel("使用者名稱");
        userNametext.setBounds(116, 135, 47, 17);
        this.getContentPane().add(userNametext);
        //定義密碼
        JLabel password=new JLabel("密碼");
        password.setBounds(116,185,47,17);
        this.getContentPane().add(password);
        //新增驗證碼
        JLabel register=new JLabel("驗證碼");
        register.setBounds(116,225,47,17);
        this.getContentPane().add(register);
        //輸入框
        //使用者
        JTextField userName=new JTextField();
        userName.setBounds(166,135,100,17);
        this.getContentPane().add(userName);
        //密碼
        JTextField passwordText=new JTextField();
        passwordText.setBounds(166,185,100,17);
        this.getContentPane().add(passwordText);
        //驗證碼
        registerText.setBounds(166,225,60,17);
        this.getContentPane().add(registerText);
        //驗證碼提示
         s=getRegister();
           res=new JButton(s);
      //  JLabel res=new JLabel(s);
        res.setBounds(236,225,80,20);
         res.addActionListener(this);
        this.getContentPane().add(res);
        //登入
        logIn.setBounds(175,260,60,20);
        logIn.addKeyListener(this);
        logIn.addActionListener(this);
        this.getContentPane().add(logIn);
    }
    String getRegister(){
        char []A=new char[4];
        for(int i=0;i<4;i++ ){
            int t=r.nextInt(62);
            if(t<26)
            A[i]=(char)(t+'a');
            else if(t<52)A[i]=(char)(t+'A'-26);
            else A[i]=(char)(t+'0'-52);
        }
    String se=new String(A);
        return se;
    }

    @Override
    public void keyTyped(KeyEvent e) {
        System.out.println(registerText.getText());
        System.out.println(s);
    }

    @Override
    public void keyPressed(KeyEvent e) {
        System.out.println(registerText.getText());
        System.out.println(s);
    }

    @Override
    public void keyReleased(KeyEvent e) {
        System.out.println(registerText.getText());
        System.out.println(s);
       Object object=e.getSource();
       if(object==logIn){

          if(s.equals(registerText.getText()))
              System.out.println("登入成功");
       }
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        Object object=e.getSource();
        if(object==logIn){
            System.out.println("heihie");
     //       System.out.println(registerText.getText());
    //        System.out.println(s);
            String str=registerText.getText();
            System.out.println(str);
            System.out.println(s);
          //  System.out.println(str);
            if(s.equals(str)){
                String string="登陸成功";
                creatJDialog(string);
                System.out.println();
            }
            else {
                String string="驗證碼錯誤";
                creatJDialog(string);
            }
        }
        if(object==res){
            s=getRegister();
           // initView();
            res.setText(s);
            System.out.println("bushigemen");
          //  res=new JButton(s);


        }
    }

    private static void creatJDialog(String string) {
        //建立一彈窗
        JDialog jDialog=new JDialog();
        //設定大小
        jDialog.setSize(200,150);
        //設定置頂
        jDialog.setAlwaysOnTop(true);
        //不關無法下面操作
        jDialog.setModal(true);
        //居中
        jDialog.setLocationRelativeTo(null);
        //新增文字
        JLabel j=new JLabel(string);
        j.setBounds(0, 0, 200, 150);
        jDialog.getContentPane().add(j);
        //可見
        jDialog.setVisible(true);
    }
}

程式碼分析

(1)做一個介面對我是一個龐大的問題我準備對他進行分析細化,然後逐個解決

a.我要用java的圖形化介面使用JFrame來做框架,Jlabel來填充文字,用JBotton來做按鈕,用JFieldText來作輸入用的文字框

b.獲取驗證碼封裝成一個get方法.用字串來作返回值 

c.需要對各個按鈕加上事件監聽,需要實現介面ActionListener

(2)大體框架和問題梳理完成,在細節上

a.對與JFrame,要設定大小,是否可見,位置,關閉方式

b.Jbotton 設定監聽,設定大小位置,設定在頂部,設定不關閉無法其他操作

c.寫一個彈窗函式,來實現對各種情況的回應比如驗證碼錯誤等等

結果展示


點選按鈕可以更新驗證碼

驗證碼正確顯示登入成功

錯誤顯示驗證碼錯誤

相關文章