用科大訊飛與ChatGPT 通過描述 實作一段Java代碼
描述内容 “n 個獎品,每個獎品的中獎機率不一樣,實作抽獎 Java代碼”
下面是兩者的回複
科大訊飛
完整代碼如下:
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Lottery {
public static void main(String[] args) {
// 假設有10個獎項,每個獎項的中獎機率為0.1
List<Integer> prizes = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
prizes.add(i);
}
// 每個獎項的中獎機率清單
List<Double> probabilityList = new ArrayList<>();
for (int i = 0; i < prizes.size(); i++) {
probabilityList.add((double) 1 / prizes.size());
}
// 随機抽取一個獎項
Random random = new Random();
int winnerIndex = random.nextInt(prizes.size());
int winner = prizes.get(winnerIndex);
// 根據中獎機率計算中獎機率值
double probability = probabilityList.get(winnerIndex);
double totalProbability = probabilityList.stream().reduce((a, b) -> a + b).getAsDouble();
double winningProbability = Math.pow(probability, totalProbability);
// 輸出中獎結果
System.out.println("恭喜編号為" + winner + "的選手獲得一等獎!中獎機率為:" + winningProbability);
}
}
下面是 ChatGPT 的回答
完整代碼如下:
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Lottery {
private List<Prize> prizes;
private Random random;
public Lottery() {
prizes = new ArrayList<>();
random = new Random();
}
public void addPrize(String name, double probability) {
prizes.add(new Prize(name, probability));
}
public String drawPrize() {
double totalProbability = 0.0;
// 計算總機率
for (Prize prize : prizes) {
totalProbability += prize.getProbability();
}
double randomValue = random.nextDouble() * totalProbability;
double cumulativeProbability = 0.0;
// 根據機率抽取獎品
for (Prize prize : prizes) {
cumulativeProbability += prize.getProbability();
if (randomValue <= cumulativeProbability) {
return prize.getName();
}
}
return null; // 未中獎
}
public static void main(String[] args) {
Lottery lottery = new Lottery();
lottery.addPrize("獎品A", 0.2); // 中獎機率為 0.2
lottery.addPrize("獎品B", 0.3); // 中獎機率為 0.3
lottery.addPrize("獎品C", 0.5); // 中獎機率為 0.5
String luckyPrize = lottery.drawPrize();
if (luckyPrize != null) {
System.out.println("恭喜您中獎了!獲得了:" + luckyPrize);
} else {
System.out.println("很遺憾,您沒有中獎。");
}
}
}
class Prize {
private String name;
private double probability;
public Prize(String name, double probability) {
this.name = name;
this.probability = probability;
}
public String getName() {
return name;
}
public double getProbability() {
return probability;
}
}
還有很大的發展空間呀