# 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 如果輸的話,下注的錢會從資金扣掉
*/
```
:::