Java HiLow百分比概率计算器——明显的逻辑问题
我在使用基于Java的概率计算器进行HiLow游戏的迭代时遇到了一些困难(特别是这个:)。该计划的目的是统计建议给定Java HiLow百分比概率计算器——明显的逻辑问题,java,probability,playing-cards,Java,Probability,Playing Cards,我在使用基于Java的概率计算器进行HiLow游戏的迭代时遇到了一些困难(特别是这个:)。该计划的目的是统计建议给定CHANCE\u阈值的下注。该程序还跟踪所玩的牌。我遇到的问题与机会计算有关。到目前为止,我已经成功地解决了“A”(Ace)的值,但在测试其他值时遇到了问题。很明显,在百分之十的概率估值背后,一定有逻辑上的错误 import java.util.Scanner; public class HiLow { public static void main(String[]
CHANCE\u阈值的下注。该程序还跟踪所玩的牌。我遇到的问题与机会计算有关。到目前为止,我已经成功地解决了“A”(Ace)的值,但在测试其他值时遇到了问题。很明显,在百分之十的概率估值背后,一定有逻辑上的错误
import java.util.Scanner;
public class HiLow {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String flip = "";
double flipInt = 0.0;
final double CHANCE_THRESHOLD = 0.75;
double chanceLower = 0;
double chanceHigher = 0;
String cardArray[] = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
int cardValue[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 };
int cardCounter[] = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 };
int remainingCards = 0;
while (!(flip.equalsIgnoreCase("e"))) {
for (int x = 0; x < cardCounter.length; x++) {
cardCounter[x] = 4;
}
chanceLower = 0;
chanceHigher = 0;
System.out.print(" > ");
flip = scan.next();
while (!(flip.equalsIgnoreCase("r")) && !(flip.equalsIgnoreCase("e"))) {
for (int x = 0; x < 13; x++) {
if (flip.equalsIgnoreCase(cardArray[x])) {
flipInt = cardValue[x];
cardCounter[x]--;
}
}
remainingCards = 0;
for (int x = 0; x < cardCounter.length; x++) {
remainingCards = remainingCards + cardCounter[x];
}
chanceLower = (((flipInt) - 1) + cardCounter[(int) (flipInt - 1)]) / remainingCards;
System.out.println((((flipInt) - 1) + cardCounter[(int) (flipInt - 1)]) + " / " + remainingCards + " = " + chanceLower);
// This line should output 0.98039215686 given the input of 'a'
//chanceHigher = ((13 - (flipInt)) + cardCounter[(int) (flipInt - 1)]) / remainingCards;
//System.out.println(((13 - (flipInt)) + cardCounter[(int) (flipInt - 1)]) + " / " + remainingCards + " = " + chanceHigher);
chanceHigher = Math.abs(1 - chanceLower);
System.out.println(Math.abs((((flipInt) - 1) + cardCounter[(int) (flipInt - 1)]) - remainingCards) + " / " + remainingCards + " = " + chanceHigher);
if (chanceLower > chanceHigher) {
if (chanceLower >= CHANCE_THRESHOLD) {
System.out.println("Bet Lower.");
} else if (chanceLower > (CHANCE_THRESHOLD - 0.10)){
System.out.println("Bet with Caution.");
} else {
System.out.println("Risk Outside Threshold.");
}
} else {
if (chanceHigher >= CHANCE_THRESHOLD) {
System.out.println("Bet Higher.");
} else if (chanceHigher > (CHANCE_THRESHOLD - 0.10)){
System.out.println("Bet with Caution.");
} else {
System.out.println("Risk Outside Threshold.");
}
}
for (int x = 0; x < cardCounter.length; x++) {
System.out.print(cardCounter[x] + ":" + cardArray[x] + " ");
}
System.out.print("\n");
System.out.print(" > ");
flip = scan.next();
}
}
}
}
import java.util.Scanner;
公共类HiLow{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
字符串翻转=”;
双flipInt=0.0;
最终双机会_阈值=0.75;
双信道功率=0;
双通道更高=0;
字符串卡片数组[]={“A”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“J”、“Q”、“K”};
int cardValue[]={1,2,3,4,5,6,7,8,9,10,11,12,13};
int cardCounter[]={4,4,4,4,4,4,4,4,4,4,4};
剩余卡的整数=0;
while(!(翻转相等信号案例(“e”)){
对于(int x=0;x”);
flip=scan.next();
而(!(翻转等信号案例(“r”)和&!(翻转等信号案例(“e”)){
对于(int x=0;x<13;x++){
if(flip.equalsIgnoreCase(cardArray[x])){
flipInt=cardValue[x];
持卡柜台[x]-;
}
}
剩余卡片=0;
对于(int x=0;xchanceHigher){
如果(信道功率>=机会阈值){
System.out.println(“下注”);
}否则如果(圣坛权力>(机会门槛-0.10)){
System.out.println(“小心下注”);
}否则{
System.out.println(“风险超出阈值”);
}
}否则{
如果(机会更高>=机会阈值){
System.out.println(“下注更高”);
}否则如果(机会更高>(机会阈值-0.10)){
System.out.println(“小心下注”);
}否则{
System.out.println(“风险超出阈值”);
}
}
对于(int x=0;x”);
flip=scan.next();
}
}
}
}
一如既往,我们非常感谢您的帮助。提前向您表示感谢。您需要获得剩余卡数的总和低于您拥有的卡值(而不仅仅是确定剩余卡的总数)。例如,您可以使用
int[] cardsBelow = new int[13];
for (int i=0; i < cardsBelow.length; i++) {
if (i == 0) {
cardsBelow[i] = cardCounter[i];
} else {
cardsBelow[i] = cardsBelow[i-1] + cardCounter[i];
}
}
int[]cardsBelow=newint[13];
对于(int i=0;i
这样,下面[i-1]
的单元格卡包含第i张卡下面的卡数 首先,您没有关闭扫描仪,但我想它只是被忽略了
其次,仅存卡片是不够的。这一次,你不应该计算剩余的相同价值的牌——它们不高也不低,只是一样
不需要计算整个大/低卡阵列,2个变量就足够了
remainingLowerCards = 0;
remainingHigherCards = 0;
for (int x = 0; x < cardCounter.length; x++) {
remainingCards = remainingCards + cardCounter[x];
if (x < flipInt - 1) {
remainingLowerCards += cardCounter[x];
} else if (x >= flipInt) {
remainingHigherCards += cardCounter[x];
}
}
chanceLower = ((double) remainingLowerCards) / remainingCards;
System.out.println("Lower: " + remainingLowerCards + " / " + remainingCards + " = " + chanceLower);
// This line should output 0.98039215686 given the input of 'a'
chanceHigher = ((double) remainingHigherCards) / remainingCards;
System.out.println("Higher: " + remainingHigherCards + " / " + remainingCards + " = "
+ chanceHigher);
remainingLowerCards=0;
剩余高卡=0;
对于(int x=0;x=flipInt),则为else{
剩余高卡+=卡计数器[x];
}
}
Chancellower=((双倍)剩余较低信用卡)/剩余信用卡;
System.out.println(“下部:“+remainingLowerCards+”/“+remainingCards+”=“+chanceLower”);
//如果输入“a”,该行应输出0.98039215686
chanceHigher=((双)剩余高卡)/剩余卡;
System.out.println(“更高:+remainingHigherCards+”/“+remainingCards+”=”
+机会(更高);
但有可能下一张抽到的牌是相同的,这就是为什么我需要将它们计算为较低的,因为在我链接的游戏中,豪斯赢了平局。也许我需要多考虑一下,但非常感谢你的意见。正是我所说的——如果豪斯赢了,你不能把它们加到剩下的高/低牌上,b