搜尋此網誌

2013年6月16日 星期日

求 JAVA 程式碼註解

 import java.util.Scanner;  
 public class GuessNumber03 {  
      public static void main(String[] args) {  
           int a, b, c, d;// 四位數字a , b , c , d  
           a = (int) (Math.random() * (9)) + 1;// 1~9 , 首位數不為零.  
           b = (int) (Math.random() * (10));// 0~9  
           c = (int) (Math.random() * (10));// 0~9  
           d = (int) (Math.random() * (10));// 0~9  
           String str = String.valueOf(a) + String.valueOf(b) + String.valueOf(c)  
                     + String.valueOf(d);// 把電腦產生的隨機數字 , 組合成字串.  
           String ans = "";// 儲存使用者猜的答案  
           Scanner sc = new Scanner(System.in);// 從命令列讀取輸入的值.  
           boolean check = false;// 預設為沒有猜到答案.  
           System.out.println("請輸入四個數字,數字對且位置正確得A,位置錯誤得B");  
           int count = 0;// 紀錄猜的次數  
           while (++count <= 10) { // 限制猜的次數到10次沒答對自動結束  
                while (!check) {// 如果沒答對 , 則繼續猜  
                     ans = sc.next();// 讀取使用者輸入的數字.  
                     String[] ansTmp = ans.split("");// 把答案abcd,分開存入暫存的字串陣列.  
                     String[] inTmp = str.split("");// 把電腦的答案,分開存入暫存的字串陣列.  
                     int A = 0;  
                     int B = 0;  
                     for (int i = 0; i < ansTmp.length; i++) {// 逐各取出使用者的答案.  
                          for (int j = 0; j < ansTmp.length; j++) {// 逐各取出使用者的答案 ,  
                                                                                 // 拿來和電腦的答案比對.  
                               if (inTmp[j].equals(ansTmp[i]) && i == j)// 假如位置一樣且數字一樣  
                                                                                      // , a++  
                                    A++;  
                               else if (inTmp[j].equals(ansTmp[i]) && i != j)// 有數字但是位置不一樣.b++  
                                    B++;  
                          }  
                     }  
                     System.out.println("判斷結果" + A + "A" + B + "B");  
                     if (A == 4)// 假如4A,  
                          check = true;// 設定猜到答案  
                     if (A == 4 & B == 0)// 假如4A且B等於零 , 則印出,恭喜你,答對ㄌ  
                          System.out.println("恭喜你,答對ㄌ");  
                     break;  
                }  
           }  
           System.out.println("遊戲結束");  
      }  
 }  

Java多重按鍵偵測.

 import java.awt.Dimension;  
 import java.awt.EventQueue;  
 import java.awt.event.KeyAdapter;  
 import java.awt.event.KeyEvent;  
 import javax.swing.JFrame;  
 import javax.swing.JLabel;  
 import javax.swing.JPanel;  
 public class MKPD extends JFrame  
 {  
   public MKPD()  
   {  
    super("MKPD");  
    setDefaultCloseOperation(EXIT_ON_CLOSE);  
    setContentPane(new KeyPanel());  
    pack();  
    setVisible(true);  
   }  
   public static void main(String[] args)  
   {  
    Runnable r = new Runnable()  
           {  
            public void run()  
            {  
              new MKPD();  
            }  
           };  
    EventQueue.invokeLater(r);  
   }  
 }  
 class KeyPanel extends JPanel  
 {  
   private enum GameState { MOVED, JUMPED, MOVED_THEN_JUMPED,  
               JUMPED_THEN_MOVED };  
   private GameState gs = null;  
   private boolean rightPressed = false;  
   private boolean upPressed = false;  
   private JLabel lblStatus = null;  
   KeyPanel()  
   {  
    KeyAdapter ka = new KeyAdapter()  
            {  
              public void keyPressed(KeyEvent ke)  
              {  
               handleKeyPress(ke);  
              }  
              public void keyReleased(KeyEvent ke)  
              {  
               handleKeyRelease(ke);  
              }  
            };  
    addKeyListener(ka);  
    lblStatus = new JLabel("", JLabel.CENTER);  
    lblStatus.setPreferredSize(new Dimension(200, 50));  
    add(lblStatus);  
    setFocusable(true);  
    requestFocus();  
   }  
   private void handleKeyPress(KeyEvent ke)  
   {  
    int keyCode = ke.getKeyCode();  
    if (keyCode == KeyEvent.VK_RIGHT)  
      rightPressed = true;  
    else  
    if (keyCode == KeyEvent.VK_UP)  
      upPressed = true;  
    updateState();  
    updateLabel();  
   }  
   private void handleKeyRelease(KeyEvent ke)  
   {  
    int keyCode = ke.getKeyCode();  
    if (keyCode == KeyEvent.VK_RIGHT)  
      rightPressed = false;  
    else  
    if (keyCode == KeyEvent.VK_UP)  
      upPressed = false;  
    updateState();  
    updateLabel();  
   }  
   private void updateLabel()  
   {  
    if (gs == null)  
    {  
      lblStatus.setText("");  
      return;  
    }  
    switch (gs)  
    {  
      case MOVED_THEN_JUMPED:  
       lblStatus.setText("Moved and then jumped");  
       break;  
      case JUMPED_THEN_MOVED:  
       lblStatus.setText("Jumped and then moved");  
       break;  
      case MOVED:  
       lblStatus.setText("Moved");  
       break;  
      case JUMPED:  
       lblStatus.setText("Jumped");  
    }  
   }  
   private void updateState()  
   {  
    if (rightPressed && upPressed)  
    {  
      if (gs == GameState.MOVED)  
       gs = GameState.MOVED_THEN_JUMPED;  
      else  
      if (gs == GameState.JUMPED)  
       gs = GameState.JUMPED_THEN_MOVED;  
    }  
    else  
    if (rightPressed)  
      gs = GameState.MOVED;  
    else  
    if (upPressed)  
      gs = GameState.JUMPED;  
    else  
      gs = null;  
   }  
 }