源代码不是直接翻译成机器语言
相对于编译型语言存在的,源代码不是直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。比如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 }