Java&Kotlin語法對(duì)比篇(一)|如何做一個(gè)隨機(jī)抽牌并比較大小的小Demo枝缔?

  • 溫馨提示:本篇重在邏輯和思維方式布疙,只涉及少量語法!愿卸!

前言

大家好呀灵临!在學(xué)習(xí)了一些Java和kotlin的基礎(chǔ)語法之后,小編將在這里對(duì)新學(xué)習(xí)的一些語法知識(shí)進(jìn)行對(duì)比和總結(jié)趴荸。我們將通過寫一個(gè)隨機(jī)抽牌并比較大小的小Demo的方式來對(duì)Java和kotlin進(jìn)行對(duì)比學(xué)習(xí)儒溉,讓我們一起來看看吧!

包含語法:
1.定義變量
2.方法重載
3.if判斷語句
4.for循環(huán)
5.構(gòu)造方法赊舶,初始化
6.輸出語句
7.基本格式

  • 注:實(shí)現(xiàn)本Demo采用了面向?qū)ο蟮乃伎挤绞秸龃睿cc是完全不同的思考方式

正文

一、pokerDemo的功能

在Demo中笼平,我們需要在一副撲克牌中抽取兩張牌(除去大小王),然后對(duì)兩張牌進(jìn)行比較舔痪。首先比較牌面點(diǎn)數(shù)的大小寓调,然后比較花色的大小,最后輸出兩張牌的比較結(jié)果锄码。

注意:點(diǎn)數(shù)大小順序(依次增大):"3","4","5","6","7","8","9","10","J","Q","K","A","2"
花色大小順序(依次減卸嵊ⅰ):"?","?","?","?"

二、分析如何實(shí)現(xiàn)pokerDemo

(一)滋捶、文字分析

  1. 有兩張牌痛悯,比較點(diǎn)數(shù)和花色。但由于點(diǎn)數(shù)非純數(shù)字而花色也難以比較重窟,因此我們選擇將點(diǎn)數(shù)和花色分別放到字符數(shù)組中载萌,將點(diǎn)數(shù)和花色都從小到大放置,這樣對(duì)應(yīng)元素的下標(biāo)也依次增大巡扇,我們比較元素的下標(biāo)時(shí)即可比較對(duì)應(yīng)的點(diǎn)數(shù)和花色扭仁。

  2. 創(chuàng)建一個(gè)可以管理所有撲克牌的類。這個(gè)管理器既可以產(chǎn)生所有的牌厅翔,又可以讓我們隨機(jī)從中抽取兩張牌乖坠。

(二)、UML類圖

PokerDemo-UML類圖

三刀闷、代碼對(duì)比

(一)熊泵、PokerNumber類和PokerSuit類

1. Java

public class PokerNumber {
    String number;
    int tag;

    public PokerNumber(String number, int tag) {
        this.number = number;
        this.tag = tag;
    }
}
public class PokerSuit {
    String suit;
    int tag;

    public PokerSuit(String suit, int tag) {
        this.suit = suit;
        this.tag = tag;
    }
}

Java中:
1.定義變量:“類型 類型名”
2.對(duì)默認(rèn)構(gòu)造方法進(jìn)行重載
注:在{ }中進(jìn)行重載

2. kotlin

class PokerNumber(
    val number: String,
    val tag:Int
)
class PokerSuit(
    val suit:String,
    val tag:Int
)

kotlin中:
1.定義變量:“類型(var/val)類型名[:類型的類 eg.Int String...]”
2.直接賦予兩個(gè)參數(shù)進(jìn)行重載
注:在( )中傳遞參數(shù)

(二)仰迁、Poker類

1. Java

public class Poker {
    //構(gòu)成一張牌的兩個(gè)屬性
    PokerNumber numberObj;
    PokerSuit suitObj;

    //當(dāng)屬性為私有時(shí),用get方法得到兩個(gè)屬性
    public PokerNumber getNumberObj() {
        return numberObj;
    }
    public PokerSuit getSuitObj() {
        return suitObj;
    }

    //重載默認(rèn)構(gòu)造函數(shù)顽分,可以直接使用帶參數(shù)的方法對(duì)牌進(jìn)行初始化
    public Poker(PokerNumber numberObj, PokerSuit suitObj) {
        this.numberObj = numberObj;
        this.suitObj = suitObj;
    }

    //定義一個(gè)compare構(gòu)造方法徐许,傳遞一個(gè)Poker類型的參數(shù)
    //對(duì)兩張牌進(jìn)行比較,返回類型為Boolean型
    public boolean compare(Poker other){
        if (this.numberObj.tag == other.numberObj.tag){
            if (this.suitObj.tag > other.suitObj.tag){
                return true;
            }else {
                return false;
            }
        }
        else {
            if (this.numberObj.tag > other.numberObj.tag){
                return true;
            }else {
                return false;
            }
        }
    }
}

在Java中:
1.定義一個(gè)Poker類需要的屬性和compare方法
2.if語句只能在其中進(jìn)行操作怯邪,不能直接作為結(jié)果返回

2. kotlin

class Poker(
    val numberObj:PokerNumber,
    val suitObj:PokerSuit
) {
    //返回值為boolean類型
    fun compareTo(other:Poker):Boolean{
//        var result:Boolean = true
//        //比較點(diǎn)數(shù)
//        if (this.numberObj.tag == other.numberObj.tag){
//            //點(diǎn)數(shù)相同 比較花色
//            result = this.suitObj.tag > other.suitObj.tag
//        }else{
//            result = this.numberObj.tag > other.numberObj.tag
//        }
//        return result

        return if (this.numberObj.tag == other.numberObj.tag){
            //點(diǎn)數(shù)相同 比較花色
            this.suitObj.tag > other.suitObj.tag
        }else{
            this.numberObj.tag > other.numberObj.tag
        }
    }
}

kotlin中:
1.直接在( )中傳遞兩個(gè)變量(指定變量的類型)绊寻,在{ }中寫構(gòu)造方法
2.if語句里{ }中的最后一句能夠直接作為結(jié)果返回也可進(jìn)行操作,如以上代碼的注釋部分與Java語法相似悬秉,而return部分直接作為結(jié)果返回

(三)澄步、PokerManager類

1. Java

public class PokerManager {
    ArrayList<Poker> pokers = new ArrayList<>();

    //建立兩個(gè)字符數(shù)組分別放置點(diǎn)數(shù)和花色
    String[] numbers = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
    String[] suits = {"?", "?", "?", "?"};

    //重載默認(rèn)構(gòu)造函數(shù),產(chǎn)生一副牌
    public PokerManager() {
        for (int i = 0; i < numbers.length; i++) {
            for (int j = 0; j < suits.length; j++) {
                //創(chuàng)造一張牌的點(diǎn)數(shù)和花色
                PokerNumber pokerNumber = new PokerNumber(numbers[i],i);
                PokerSuit pokerSuit = new PokerSuit(suits[j],j);
                //創(chuàng)造一張牌
                Poker poker = new Poker(pokerNumber,pokerSuit);
                //將牌添加到一副牌所在的數(shù)組中
                pokers.add(poker);
            }
        }
        //隨機(jī)置換指定列表元素和泌,此處可以不寫村缸,因?yàn)橄路娇梢噪S機(jī)得到牌面
        Collections.shuffle(pokers);
    }

    //隨機(jī)得到一張牌,構(gòu)造getPokers方法武氓,返回類型為Poker
    public Poker getPokers() {
        Random random = new Random();
        int index = random.nextInt(pokers.size());
        Poker poker = pokers.get(index);
        //將得到的牌移出牌組
        pokers.remove(poker);
        return poker;
    }
}

Java中:
1.fori循環(huán)
2.產(chǎn)生隨機(jī)數(shù)的方式Random ra = new Random( );
獲得隨機(jī)數(shù)調(diào)用的方法:ra.nextInt(數(shù)組名.size() );
3.添加和移除數(shù)組中的元素:array.add/remove(移除元素的類型名)梯皿;

2.kotlin

class PokerManager {
    //提供一個(gè)容器存儲(chǔ)所有的撲克 可以增刪數(shù)組里的內(nèi)容
    val pokers: ArrayList<Poker> = arrayListOf()
    //點(diǎn)數(shù)的數(shù)組 一旦創(chuàng)建不可改變
    val numbers = arrayOf("2","3","4","5","6","7","8","9","10","J","Q","K","A")
    //花色的數(shù)組
    val suits = arrayOf("?","?","?","?")

    //和構(gòu)造函數(shù)同時(shí)處理
    init {
        for ((i,number) in numbers.withIndex()){
            for ((j,suit) in suits.withIndex()){
                //創(chuàng)建點(diǎn)數(shù)和花色的對(duì)象
//                val numberObj = PokerNumber(number,i)
//                val suitObj = PokerSuit(suit,j)
//                //創(chuàng)建撲克對(duì)象
//                val poker = Poker(numberObj,suitObj)
//                //添加到數(shù)組pokers中
//                pokers.add(poker)

                //直接寫 減少輪詢
                pokers.add(
                    Poker(PokerNumber(number,i),PokerSuit(suit,j))
                )
            }
        }
    }

    fun getPoker():Poker{
        //獲取一個(gè)隨機(jī)數(shù)
//        val index = Random.nextInt(pokers.size)
        val index = (0..pokers.size).random()
        val poker = pokers[index]
        pokers.removeAt(index)
        return poker
    }
}

kotlin中:
1.init初試化塊,不用重載默認(rèn)構(gòu)造函數(shù)
2.fori循環(huán)中可以用for ((i,number) in numbers.withIndex())的方式找出元素的下標(biāo)和內(nèi)容
3.移除和添加數(shù)組中的元素:array.add(元素類型)县恕;array.removeAt(index)//index即元素的下標(biāo)

(四)东羹、Test類

1.Java

public class Test {
    public static void main(String[] args) {
        PokerManager pokerManager = new PokerManager();

        //產(chǎn)生兩張牌
        Poker poker1 = pokerManager.getPokers();
        Poker poker2 = pokerManager.getPokers();

        //比較兩張牌
        boolean result = poker1.compare(poker2);
        if (result){
            System.out.println(poker1.numberObj.number + poker1.suitObj.suit + ">" 
                               +poker2.numberObj.number + poker2.suitObj.suit);
        }else {
            System.out.println(poker1.numberObj.number + poker1.suitObj.suit + "<" 
                               +poker2.numberObj.number + poker2.suitObj.suit);
        }

    }
}

java中:
1.方法:“返回類型 方法名”
2.輸出:System.out.println/print //換行/不換行
3.每個(gè)語句間要加分號(hào),輸出用“+”連接

2.kotlin

fun main() {
    val manager = PokerManager()

    val poker1 = manager.getPoker()
    val poker2 = manager.getPoker()

    val result = poker1.compareTo(poker2)
    if (result){
        println("${poker1.numberObj.number}${poker1.suitObj.suit} > " +
                "${poker2.numberObj.number}${poker2.suitObj.suit}")
    }else{
        println("${poker1.numberObj.number}${poker1.suitObj.suit} < " +
                "${poker2.numberObj.number}${poker2.suitObj.suit}")

    }
}

kotlin中:
1.方法:“fun 方法名”
2.輸出:println/print //換行/不換行 類似于c
3.代碼間無需分號(hào)忠烛,“ ”中若想輸出代碼里的內(nèi)容用“${xx}”

四属提、總結(jié)

  • Kotlin比Java更加簡(jiǎn)潔,語法也有很多相似之處美尸。在學(xué)習(xí)的過程中冤议,我們可以用寫小Demo的方式進(jìn)行對(duì)比學(xué)習(xí)。在本篇文章中师坎,實(shí)現(xiàn)Demo的方式全部采用了面向?qū)ο蟮乃伎挤绞剿∷幔瑢⑦@個(gè)小項(xiàng)目進(jìn)行分析后分類,實(shí)現(xiàn)類的繼承胯陋、封裝蕊温,安全性得到了提高。
  • Kotlin和Java語法有一定程度的相似惶岭,我們?cè)趯W(xué)習(xí)中應(yīng)該多寫代碼寿弱,盡量不要將兩者弄混
  • 其實(shí)Kotlin和Java的語法區(qū)別并不大按灶,在編程語言的學(xué)習(xí)過程中更重要的是注重項(xiàng)目背后的邏輯思維症革,在生活中我們也應(yīng)該時(shí)刻關(guān)注并使用面向?qū)ο蟮乃伎挤绞健?/li>

免責(zé)說明:
1.萌新選手剛來,不喜勿噴鸯旁,如有錯(cuò)誤噪矛,歡迎指正(求生欲滿滿QAQ)
2. 未經(jīng)允許量蕊,禁止轉(zhuǎn)載

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市艇挨,隨后出現(xiàn)的幾起案子残炮,更是在濱河造成了極大的恐慌,老刑警劉巖缩滨,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件势就,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡脉漏,警方通過查閱死者的電腦和手機(jī)苞冯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來侧巨,“玉大人舅锄,你說我怎么就攤上這事∷境溃” “怎么了皇忿?”我有些...
    開封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長坦仍。 經(jīng)常有香客問我鳍烁,道長,這世上最難降的妖魔是什么繁扎? 我笑而不...
    開封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任老翘,我火速辦了婚禮,結(jié)果婚禮上锻离,老公的妹妹穿的比我還像新娘。我一直安慰自己墓怀,他們只是感情好汽纠,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著傀履,像睡著了一般虱朵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钓账,一...
    開封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天碴犬,我揣著相機(jī)與錄音,去河邊找鬼梆暮。 笑死服协,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的啦粹。 我是一名探鬼主播偿荷,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼窘游,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了跳纳?” 一聲冷哼從身側(cè)響起忍饰,我...
    開封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎枢劝,沒想到半個(gè)月后赋元,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體牵囤,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年赢织,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逛拱。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡敌厘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出朽合,到底是詐尸還是另有隱情俱两,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布曹步,位于F島的核電站宪彩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏讲婚。R本人自食惡果不足惜尿孔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望筹麸。 院中可真熱鬧活合,春花似錦、人聲如沸物赶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽酵紫。三九已至告嘲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間奖地,已是汗流浹背橄唬。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留参歹,地道東北人仰楚。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親缸血。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蜜氨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容