1. 程式人生 > >源代碼不是直接翻譯成機器語言

源代碼不是直接翻譯成機器語言

異常處理 length ack 能夠 class dcom else 中間 獲取

相對於編譯型語言存在的,源代碼不是直接翻譯成機器語言,而是先翻譯成中間代碼,再由解釋器對中間代碼進行解釋運行。比如Python/JavaScript / Perl /Shell等都是解釋型語言。

解釋型語言:程序不需要編譯,程序在運行時才翻譯成機器語言,每執 行一次都要翻譯一次。因此效率比較低。比如Basic語言,專門有一個解釋器能夠直接執行Basic程 序,每個語句都是執行的時候才翻譯。

  1 package Com.Table;
  2 
  3 import java.util.*;
  4 
  5 class Card{
  6     private String color;
7 private String number; 8 9 public Card(String color, String number) { 10 this.color = color; 11 this.number = number; 12 } 13 14 public String getColor() { 15 return color; 16 } 17 18 public String getNumber() { 19 return
number; 20 } 21 22 @Override 23 public boolean equals(Object obj) { 24 if (this == obj) 25 return true; 26 if (obj == null) 27 return false; 28 if (!(obj instanceof Card)) 29 return false; 30 Card other = (Card) obj;
31 if (color == null) { 32 if (other.color != null) 33 return false; 34 } else if (!color.equals(other.color)) 35 return false; 36 if (number == null) { 37 if (other.number != null) 38 return false; 39 } else if (!number.equals(other.number)) 40 return false; 41 return true; 42 } 43 44 } 45 46 class Cards { 47 private List<Card> list = new ArrayList<Card>(); 48 //創建一副撲克牌 49 public Cards(){ 50 System.out.println("-----------------創建撲克牌------------------"); 51 String[] color = {"黑桃", "紅桃", "梅花", "方片"}; 52 String[] number = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J","Q","K", "A"}; 53 for(int i=0;i<color.length;i++) 54 for(int j=0;j<number.length;j++){ 55 list.add(new Card(color[i], number[j])); 56 } 57 System.out.println("----------------撲克牌創建成功!---------------"); 58 } 59 60 //獲取一副撲克牌 61 public List<Card> getList() { 62 return list; 63 } 64 65 //洗牌(打亂) 66 public void shufCards(){ 67 System.out.println("----------------開始洗牌------------------------"); 68 Collections.shuffle(list); 69 System.out.println("----------------洗牌結束------------------------"); 70 } 71 72 //展示一副撲克牌 73 public void showCards(){ 74 System.out.print("當前的撲克牌為:"); 75 System.out.print("[ "); 76 for(int i=0;i<list.size();i++){ 77 System.out.print(list.get(i).getColor() + list.get(i).getNumber()+ " "); 78 } 79 System.out.println(" ]"); 80 } 81 82 } 83 84 class Player { 85 private int id; 86 private String name; 87 private List<Card> handCards = new ArrayList<Card>(); 88 89 public Player(int id, String name){ 90 this.id = id; 91 this.name = name; 92 } 93 94 public List<Card> getHandCards() { 95 return handCards; 96 } 97 98 public void setHandCards(Card card) { 99 handCards.add(card); 100 } 101 102 public int getId() { 103 return id; 104 } 105 106 public void setId(int id) { 107 this.id = id; 108 } 109 110 public String getName() { 111 return name; 112 } 113 114 public void setName(String name) { 115 this.name = name; 116 } 117 118 } 119 120 class CardComparator implements Comparator<Card> { 121 122 @Override 123 public int compare(Card c1, Card c2) { 124 // 構建花色和牌值數組,通過比對,計算得到某張牌的價值(大小) 125 String[] color = {"方片", "梅花", "紅桃", "黑桃"}; 126 String[] number = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J","Q","K", "A"}; 127 128 //由於比較規則是先比較牌值,如果相等再比較花色(黑紅梅方),所以將牌值賦予較高的權值 129 int valueOfC1 = 0; 130 int valueOfC2 = 0; 131 for(int i=0;i<number.length;i++){ 132 if(c1.getNumber().equals(number[i])) valueOfC1 += i*10; 133 if(c2.getNumber().equals(number[i])) valueOfC2 += i*10; 134 } 135 for(int i=0;i<color.length;i++){ 136 if(c1.getColor().equals(color[i])) valueOfC1 += i; 137 if(c2.getColor().equals(color[i])) valueOfC2 += i; 138 } 139 140 if( valueOfC1 > valueOfC2 ) return -1; 141 if( valueOfC1 < valueOfC2 ) return 1; 142 143 return 0; 144 } 145 146 } 147 public class NinteenTable { 148 //創建玩家 149 //要對玩家ID的異常處理,要求用戶只能輸入整數ID,否則需要重新輸入 150 public Player setPlayer(){ 151 int id=0; 152 String name=""; 153 Scanner console = new Scanner(System.in); 154 boolean ready = true; 155 do{ 156 try{ 157 System.out.println("輸入ID:"); 158 id = console.nextInt(); 159 ready = true; 160 }catch(Exception e){ 161 System.out.println("請輸入整數類型的ID!"); 162 ready = false; 163 console.nextLine(); 164 } 165 }while(ready==false); 166 167 System.out.println("輸入姓名:"); 168 name = console.next(); 169 return new Player(id, name); 170 } 171 172 public static void main(String[] args) { 173 //測試簡易撲克牌程序 174 NinteenTable game = new NinteenTable(); 175 //(1)創建一副牌 176 Cards cards = new Cards(); 177 //(2)展示新的撲克牌 178 cards.showCards(); 179 //(3)洗牌 180 cards.shufCards(); 181 //(4)創建玩家 182 System.out.println("--------------創建兩個(or多個)玩家就可以開始遊戲啦!-------------"); 183 List<Player> p = new ArrayList<Player>(); 184 for(int i=0;i<2;i++) 185 { 186 System.out.println("請輸入第"+(i+1)+"位玩家的ID和姓名:"); 187 p.add(game.setPlayer()); 188 } 189 for(int i=0;i<p.size();i++) 190 { 191 System.out.println("歡迎玩家:"+p.get(i).getName()); 192 } 193 //(5)撲克牌比大小遊戲開始啦~ 194 int count = 0; 195 System.out.println("------------------開始發牌---------------------"); 196 //設定每人分別拿兩張(or多張) 197 for(int i=0; i<2;i++){ 198 //玩家輪流拿牌 199 for(int j=0; j< p.size(); j++){ 200 System.out.println(">玩家"+p.get(j).getName()+"拿牌"); 201 p.get(j).setHandCards(cards.getList().get(count)); 202 count++; 203 } 204 } 205 System.out.println("------------------發牌結束!--------------------"); 206 System.out.println("------------------開始遊戲 ---------------------"); 207 for(int i=0;i<p.size();i++){ 208 System.out.print("玩家"+p.get(i).getName()+"的手牌為:[ "); 209 for(int j=0;j<p.get(i).getHandCards().size();j++){ 210 Card cur = p.get(i).getHandCards().get(j); 211 System.out.print(cur.getColor()+cur.getNumber()+" "); 212 } 213 System.out.println(" ]"); 214 } 215 216 //排序得到每個玩家最大的手牌(排序規則自定義) 217 for(int i=0;i<p.size();i++){ 218 Collections.sort(p.get(i).getHandCards(), new CardComparator()); 219 } 220 List<Card> maxCard = new ArrayList<Card>(); 221 for(int i=0;i<p.size();i++){ 222 Card maxCur = p.get(i).getHandCards().get(0); 223 System.out.println("玩家"+p.get(i).getName()+"最大的手牌為:"+ maxCur.getColor()+maxCur.getNumber()); 224 maxCard.add(maxCur); 225 } 226 227 //得到最後的勝者 228 List<Card> temp = new ArrayList<Card>(); 229 temp.addAll(maxCard); 230 Collections.sort(temp, new CardComparator()); 231 for(int i=0;i<p.size();i++){ 232 if(maxCard.get(i).equals(temp.get(0))) System.out.println("恭喜玩家:"+p.get(i).getName()+"獲勝!"); 233 } 234 } 235 }

源代碼不是直接翻譯成機器語言