源代码不是直接翻译成机器语言

匿名 (未验证) 提交于 2019-12-02 22:56:40

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

 

原文:https://www.cnblogs.com/borter/p/9385167.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!