Do...while

do

{

Poker = 1+(int)(Math.random()*52/4);

op = 1+(int)(Math.random()*52/13);

}while(only[op-1][Poker-1]);//若此張牌已出現過,就重新抽牌

only[op-1][Poker-1] = true;//表示此張牌已出現過

switch(op)

{

case 1:

j = "黑桃";

break;

case 2:

j = "紅心";

break;

case 3:

j = "方塊";

break;

case 4:

j = "梅花";

break;

}

String temp = ""+j+ "\n"+pok[Poker];

playerSpace[i].append(temp);

//判斷亂數取得的Poker是否大於10,若Poker大於10則點數只加0.5

playerPoint += (Poker > 10) ? 0.5 : (double)Poker;

}

}

else if (evtE.getSource() == btnComputer)

{

int n = 1;

btnGameplayer.setEnabled(false);

btnComputer.setEnabled(false);

btnReplay.setEnabled(true);

急需解答...幫忙詳答= =

大致上的邏輯觀念跟程式每行的分析...拜託!!

3 個解答

評分
  • 1 0 年前
    最佳解答

    do

    {

    /*

    假設 n = Math.random(),結果範圍為 0<= n <1

    52/4=13

    Math.random() * 13 結果範圍會 0 <= n < 13

    (int)為強制轉型為整數,則範圍 0<= n < 13的整數

    所以 (int)(Math.random()*52/4) 的結果會介於 0 與 12之間

    Poker = 1 + (int)(Math.random()*52/4) ,則範圍 1<= Poker <14的整數

    */

    Poker = 1+(int)(Math.random()*52/4); //隨機取撲克牌點數存入Poker

    /*

    假設 n = Math.random(),結果範圍為 0<= n <1

    52/13=4

    Math.random() * 4 結果範圍會 0 <= n < 4

    (int)為強制轉型為整數,則範圍 0<= n < 4的整數

    所以 (int)(Math.random()*52/13) 的結果會介於 0 與 4之間

    Poker = 1 + (int)(Math.random()*52/13) ,則範圍 1<= Poker <5的整數

    */

    op = 1+(int)(Math.random()*52/13); //隨機取撲克牌花色存入op

    /*

    only是一個二維陣列,用來儲存撲克牌是否出現過

    only[花色(0-3)][點數(0-12)]

    */

    }while(only[op-1][Poker-1]);//若此張牌已出現過(為真時),就重新抽牌(繼續跑回圈)

    only[op-1][Poker-1] = true;//表示此張牌已出現過(設定此陣列內容為真)

    //將對應的花色結果存入j字串中

    switch(op)

    {

    case 1:

    j = "黑桃";

    break;

    case 2:

    j = "紅心";

    break;

    case 3:

    j = "方塊";

    break;

    case 4:

    j = "梅花";

    break;

    }

    //把字串連起來

    String temp = ""+j+ "n"+pok[Poker];

    //把temp內容附加到playerSpace內

    playerSpace[i].append(temp);

    //playerPoint變數不知道是做啥用的??&larr;我的疑問,因為看不到宣告處

    //判斷亂數取得的Poker是否大於10

    //若Poker大於10,playerPoint加0.5

    //若Poker不大於10,playerPoint加Poker

    playerPoint += (Poker > 10) ? 0.5 : (double)Poker;

    }

    }

    //如果電腦取得的訊息,是否為使用者使用按鍵btnComputer,若是的話則n=1

    else if (evtE.getSource() == btnComputer) {

    int n = 1;

    //按鍵btnGameplayer,為disable,不能使用

    btnGameplayer.setEnabled(false);

    //按鍵btnComputer,為disable,不能使用

    btnComputer.setEnabled(false);

    //按鍵btnReplay,為enable,可以使用

    btnReplay.setEnabled(true);

    /*

    通常變數名稱開頭為btn的縮寫,大概指的都是button

    而後面的取名通常為功用

    */

    參考資料: 希望這樣能幫助你了解更多,若有問題我會在回答的
  • 匿名使用者
    6 年前

    * ***** http://*****/

    [電子遊戲]

    拉霸、水果盤、7PK、5PK

    [運彩遊戲]

    棒球、籃球、足球、網球、冰球、各種體育經典賽事

    [真人遊戲]

    百家樂、21點、骰寶、輪盤、牌九、三公、輪盤、翻攤、牛牛、二八杠

    [對戰遊戲]

    台灣麻將、德州撲克、骰盅吹牛、四支刀、鬥地主、十三支、二八槓、暗棋、接龍

    [彩球遊戲]

    香港六合、台灣樂透、今彩539、樂合彩、大陸時時彩、基諾彩、北京賽車、賽狗、賽馬、指數

    [優惠活動]

    1. 新舊會員儲值就送500點

    2. 真人百家樂彩金等你拿

    ***** http://*****/

    歡迎免費體驗試玩!!

    線上影片直播、正妹圖、討論區免費註冊 ~

  • 1 0 年前

    do

    {

    Poker = 1+(int)(Math.random()*52/4); //隨機取撲克牌花色存入Poker

    op = 1+(int)(Math.random()*52/13); //隨機取撲克牌點數存入op

    }while(only[op-1][Poker-1]);//若此張牌已出現過,就重新抽牌

    only[op-1][Poker-1] = true;//表示此張牌已出現過

    //將對應的花色結果存入j字串中

    switch(op)

    {

    case 1:

    j = "黑桃";

    break;

    case 2:

    j = "紅心";

    break;

    case 3:

    j = "方塊";

    break;

    case 4:

    j = "梅花";

    break;

    }

    //把字串連起來

    String temp = ""+j+ "n"+pok[Poker];

    //把temp內容附加到playerSpace內

    playerSpace[i].append(temp);

    //判斷亂數取得的Poker是否大於10,若Poker大於10則點數只加0.5

    playerPoint += (Poker > 10) ? 0.5 : (double)Poker;

    }

    }

    //如果來源是電腦, 作以下的初始設定

    else if (evtE.getSource() == btnComputer) {

    int n = 1;

    btnGameplayer.setEnabled(false);

    btnComputer.setEnabled(false);

    btnReplay.setEnabled(true);

還有問題?馬上發問,尋求解答。