用科大讯飞与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;
}
}
还有很大的发展空间呀