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

Posted borter

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了源代码不是直接翻译成机器语言相关的知识,希望对你有一定的参考价值。

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

 

以上是关于源代码不是直接翻译成机器语言的主要内容,如果未能解决你的问题,请参考以下文章

Python简介

0100 解释型语言和编译型语言

01 了解编译原理 09/04

深入分析Java的编译原理

了解编译原理

解释型语言VS编译型语言