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[]

我在使用基于Java的概率计算器进行HiLow游戏的迭代时遇到了一些困难(特别是这个:)。该计划的目的是统计建议给定
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