# Java-作業 112/12/15 ## Star三題 :::success Star程式碼如下 #### [連結](https://hackmd.io/@Programmer-Paradise/ByAwLNOU2) ::: --- ## 質數 :::success 質數... 不知道該講啥 註釋是GPT生的(怠惰 ::: :::info ```java= public class hw625 { // 判斷是否為質數的函式 public static String jhih_shu(int a){ int t = 0; // 用來標記是否存在因數的變數 if (a <= 1) return "N"; // 1和小於1的數不是質數,回傳 "N" else{ int b = (int)Math.sqrt(a) + 1; // 計算a的平方根並加1,用於限制迴圈範圍 for (int i = 2; i < b; i++) // 迴圈從2到b-1,檢查是否有因數 if (a % i == 0) return "N"; // 若有因數,回傳 "N" if (t == 0) return "Y"; // 若t仍為0,表示沒有找到因數,回傳 "Y" } return "Error"; // 發生錯誤時回傳 "Error" } public static void main(String[] args){ int t = 0; // 計數器,用於每行輸出30個質數後換行 for (int i = 2; i <= 10000; i++){ if (jhih_shu(i).equals("Y")){ System.out.printf("%5s ", i); // 格式化輸出質數,寬度為5 if (++t % 30 == 0) // 每輸出30個質數換行 System.out.println(); } } System.out.println(); // 最後換行 } } ``` ::: --- ## 遊戲 :::success 程式碼太多 1個主函數+8個子函數 100多行程式(還是盡量減短後的版本) 直接放棄寫註解...(這寫下去不知道要什麼時候才寫得完) 以下程式看看就好~ ::: :::info ```java= import java.security.SecureRandom; import java.util.Scanner; public class hw633 { public static int game(){ //擲骰子 SecureRandom random = new SecureRandom(); int s=0; for(int i=0; i<2; i++)s+=random.nextInt(7); System.out.printf("本次結果為: %d\n", s); return s; } public static void dialogue_1(int m){ //資金文案 if (m>=4000)System.out.println("不是第一次玩了吧~朋友"); else if (m>=2000)System.out.println("玩得還不錯呀~朋友"); else if (m>=1000)System.out.println("這是一場豪賭~朋友"); else if (m>=700)System.out.println("還能再賭一賭~朋友"); else if (m>=400)System.out.println("還有很多機會~朋友"); else if (m>=100)System.out.println("要不放手一搏~朋友"); else System.out.println("都到這份上了~朋友"); System.out.printf("現有資金: %d\n你想下注多少?\n", m); } public static void dialogue_2(int m, int s){ //下注資金文案 if (m==s)System.out.println("要背水一戰了~朋友"); else if (s<10)System.out.println("你怎麼這麼窮呀~朋友"); else if (s<100)System.out.println("才這麼點呀~朋友"); else if (s<300)System.out.println("膽子真小呀~朋友"); else if (s<600)System.out.println("這才對嘛~朋友"); else if (s<1000)System.out.println("豪擲千金~朋友"); else System.out.println("賭這麼大呀~朋友"); } public static int bet_num(int m){ //下注金額之合法性 Scanner input = new Scanner(System.in); dialogue_1(m); int bet; bet = input.nextInt(); while(!(bet<=m && bet>=0)){ System.out.println("金額錯誤~請重新輸入~"); bet = input.nextInt(); } dialogue_2(m, bet); return bet; } public static void liquidation(int m){ //清算 System.out.println("不想下注是吧~\n那就不下注了~\n遊戲結束~"); System.out.printf("剩餘資金: %d", m); } public static int victory(int w, int m, int b){ //贏 for(int i=0; i<w; i++)System.out.print("又"); System.out.println("贏啦~\n"); m+=b; return m; } public static int defeated(int l, int m, int b){ //輸 for(int i=0; i<l; i++)System.out.print("又"); System.out.println("輸啦~\n"); m-=b; return m; } public static void rules(){ //遊戲規則 System.out.println("遊戲規則:"); System.out.println("請不斷輸入下注金額"); System.out.println("每次輸入都不得大於現有資金數"); System.out.println("輸入下注金額後,遊戲便會開始"); System.out.println("如果贏了,您會拿到您下注的金額"); System.out.println("輸了,則會從您資金中扣除"); System.out.println("如果輸入0,則視為結束遊戲~"); System.out.println("以上\n"); } public static void main(String[] args){ //主程式 rules(); int money = 1000, turn_num = 0, win = 0, lost = 0, bet, s; //資金,回合數,連勝,連輸,下注金額,結果 bet = bet_num(money); while(bet!=0){ System.out.printf("第 %d 回合\n", ++turn_num); s = game(); if (s==7 || s==11){ money = victory(win, money, bet); win++; lost=0; }else if (s==2 || s==3 || s==12){ money = defeated(lost, money, bet); lost++; win=0; }else{ int sp = s; //點數設置 while (true){ s = game(); if (s==7){ money = defeated(lost, money, bet); lost++; win=0; break; }else if (s==sp){ money = victory(win, money, bet); win++; lost=0; break; }else s = game(); } } if (money==0){ System.out.println("沒錢啦~\n輸的一蹋糊塗呢~朋友"); break; } bet = bet_num(money); } if (bet==0)liquidation(money); } } /* * 文案 * $ = money = 現有資金 * 玩的好厲害呀~朋友 -> $>=4000 * 玩得還不錯呀~朋友 -> 3999>$>=2000 * 這是一場豪賭~朋友 -> 1999>$>=1000 * 還能再賭一賭~朋友 -> 999>$>=700 * 還有很多機會~朋友 -> 699>$>=400 * 要不放手一搏~朋友 -> 399>$>=100 * 都到這份上了~朋友 -> 99>$>=1 * 輸的一蹋糊塗~朋友 -> $=0 * * 你怎麼這麼窮呀~朋友-> 單次賭注<10 * 才這麼點呀~朋友 -> 10<=單次賭注<100 * 膽子真小呀~朋友 -> 101<=單次賭注<300 * 這才對嘛~朋友 -> 301<=單次賭注<600 * 豪擲千金~朋友 -> 601<=單次賭注 * 賭這麼大呀~朋友 -> 1000<=單次賭注 * 要背水一戰了~朋友 -> 單次賭注=$ * * 規則 * 1. 每次開盤皆需輸入下注金額 * * 2.1 如果下注金額>資金,就需重新輸入 * 2.2 如果下注金額=0,則視為不再下注,返回最後資金,並結束程式 * 2.3 如果下注金額<=資金,則進行運算 * 2.4 如果資金=0,則強制結束程式 * * 3.1 如果贏的話,下注的錢會以兩倍的量回到資金 * 3.2 如果輸的話,下注的錢會從資金扣掉 */ ``` :::