動手動腦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.寫一個彈窗函式,來實現對各種情況的回應比如驗證碼錯誤等等
結果展示
點選按鈕可以更新驗證碼
驗證碼正確顯示登入成功
錯誤顯示驗證碼錯誤