简体   繁体   English

试图弄清楚为什么我的代码继续打印

[英]Trying to figure out why my code keeps printing

I'm trying to create the 24 game in java to practice. 我正在尝试用Java创建24游戏来练习。 The 24 Game is an arithmetical game in which the objective is to find a way to manipulate four integers so that the end result is 24. Addition, subtraction, multiplication, or division in any order of the numbers may be used to make the four digits operations from one to nine equal 24. 24游戏是一种算术游戏,其目的是找到一种操作四个整数的方式,使最终结果为24。可以使用任何数字顺序的加法,减法,乘法或除法将四位数字相加。运算从1到9等于24。

The rules are simple: you have to use each number only once and only the 4 numbers that were read from the user to find one equation to obtain 24. 规则很简单:您只需使用每个数字一次,并且只需从用户读取的4个数字中找到一个方程即可获得24个。

Basically my problem is I am trying to append the equations that == 24 to the StringBuffer output. 基本上我的问题是我试图将== 24的方程式附加到StringBuffer输出中。 I may be using StringBuffer incorrectly. 我可能没有正确使用StringBuffer。 I want to add all the equations to the StringBuffer and then delete all of the duplicate equations before printing the StringBuffer to the console. 我想将所有方程式添加到StringBuffer,然后删除所有重复的方程式,然后再将StringBuffer打印到控制台。 However, no matter what all the equations print and I'm not sure why. 但是,无论所有方程式打印什么,我都不知道为什么。 I'm not sure if this is even possible with StringBuffer as it may only append chars. 我不确定StringBuffer是否甚至可以实现,因为它只能追加字符。

int i = 0;
public void Solve(double w, double x, double y, double z){
    double [] nums = {w,x,y,z};
    int length = nums.length;
    double eHold=0, fHold=0;
    boolean [] used = new boolean[length];
    StringBuffer output = new StringBuffer(400);
    int position = 0;
    int value = 0;

    if (position == nums.length){
        //for (int i=0; i<output.length();i++){
            //if (output.)
            System.out.println("");
            return;
        //}
    }

    else {
        for (int i=0; i<nums.length; i++){

            if (((nums[i]/nums[i+1])*fHold)==24)
                output.append (nums[i]+" / "+nums[i+1]+" * ("+nums[i+3]+" + "+nums[i+4]+")" + " = 24");
            else if (((nums[i]/nums[i+1])-fHold)==24)
                output.append (nums[i]+" / "+nums[i+1]+" - ("+nums[i+3]+" + "+nums[i+4]+")" + " = 24");
            else if (((nums[i]*nums[i+1])-fHold)==24)
                output.append (nums[i]+" * "+nums[i+1]+" - ("+nums[i+3]+" + "+nums[i+4]+")" + " = 24");
            else if (((nums[i]*nums[i+1])/fHold)==24)
                output.append (nums[i]+" * "+nums[i+1]+" / ("+nums[i+3]+" + "+nums[i+4]+")" + " = 24");
            else if (((nums[i]-nums[i+1])*fHold)==24)
                output.append (nums[i]+" - "+nums[i+1]+" * ("+nums[i+3]+" + "+nums[i+4]+")" + " = 24");
            else if (((nums[i]-nums[i+1])/fHold)==24)
                output.append (nums[i]+" - "+nums[i+1]+" / ("+nums[i+3]+" + "+nums[i+4]+")" + " = 24");
            else value++;
            fHold=nums[i+3]-nums[i+4];

            if (((nums[i]/nums[i+1])*fHold)==24)
                output.append (nums[i]+" / "+nums[i+1]+" * ("+nums[i+3]+" - "+nums[i+4]+")" + " = 24");
            else if (((nums[i]/nums[i+1])+fHold)==24)
                output.append (nums[i]+" / "+nums[i+1]+" + ("+nums[i+3]+" - "+nums[i+4]+")" + " = 24");
            else if (((nums[i]*nums[i+1])+fHold)==24)
                output.append (nums[i]+" * "+nums[i+1]+" + ("+nums[i+3]+" - "+nums[i+4]+")" + " = 24");
            else if (((nums[i]*nums[i+1])/fHold)==24)
                output.append (nums[i]+" * "+nums[i+1]+" / ("+nums[i+3]+" - "+nums[i+4]+")" + " = 24");
            else if (((nums[i]+nums[i+1])*fHold)==24)
                output.append (nums[i]+" + "+nums[i+1]+" * ("+nums[i+3]+" - "+nums[i+4]+")" + " = 24");
            else if (((nums[i]+nums[i+1])/fHold)==24)
                output.append (nums[i]+" + "+nums[i+1]+" / ("+nums[i+3]+" - "+nums[i+4]+")" + " = 24");
            else value++;
            fHold=nums[i+3]*nums[i+4];

            if (((nums[i]/nums[i+1])-fHold)==24)
                output.append (nums[i]+" / "+nums[i+1]+" * ("+nums[i+3]+" * "+nums[i+4]+")" + " = 24");
            else if (((nums[i]/nums[i+1])+fHold)==24)
                output.append (nums[i]+" / "+nums[i+1]+" + ("+nums[i+3]+" * "+nums[i+4]+")" + " = 24");
            else if (((nums[i]-nums[i+1])+fHold)==24)
                output.append (nums[i]+" - "+nums[i+1]+" + ("+nums[i+3]+" * "+nums[i+4]+")" + " = 24");
            else if (((nums[i]-nums[i+1])/fHold)==24)
                output.append (nums[i]+" - "+nums[i+1]+" / ("+nums[i+3]+" * "+nums[i+4]+")" + " = 24");
            else if (((nums[i]+nums[i+1])-fHold)==24)
                output.append (nums[i]+" + "+nums[i+1]+" - ("+nums[i+3]+" * "+nums[i+4]+")" + " = 24");
            else if (((nums[i]+nums[i+1])/fHold)==24)
                output.append (nums[i]+" + "+nums[i+1]+" / ("+nums[i+3]+" * "+nums[i+4]+")" + " = 24");
            else value++;
            fHold=nums[i+3]/nums[i+4];

            if (((nums[i]-nums[i+1])*fHold)==24)
                output.append (nums[i]+" - "+nums[i+1]+" * ("+nums[i+3]+" / "+nums[i+4]+")" + " = 24");
            else if (((nums[i]-nums[i+1])+fHold)==24)
                output.append (nums[i]+" - "+nums[i+1]+" + ("+nums[i+3]+" / "+nums[i+4]+")" + " = 24");
            else if (((nums[i]*nums[i+1])+fHold)==24)
                output.append (nums[i]+" * "+nums[i+1]+" + ("+nums[i+3]+" / "+nums[i+4]+")" + " = 24");
            else if (((nums[i]*nums[i+1])-fHold)==24)
                output.append (nums[i]+" * "+nums[i+1]+" - ("+nums[i+3]+" / "+nums[i+4]+")" + " = 24");
            else if (((nums[i]+nums[i+1])*fHold)==24)
                output.append (nums[i]+" + "+nums[i+1]+" * ("+nums[i+3]+" / "+nums[i+4]+")" + " = 24");
            else if (((nums[i]+nums[i+1])-fHold)==24)
                output.append (nums[i]+" + "+nums[i+1]+" - ("+nums[i+3]+" / "+nums[i+4]+")" + " = 24");
            else value++;
            fHold=nums[i+1]*nums[i+3];

            if (((nums[i]-fHold)/nums[i+4])==24)
                output.append (nums[i]+" - ("+nums[i+1]+" * "+nums[i+3]+") / "+nums[i+4] + " = 24");
            else if (((nums[i]-fHold)+nums[i+4])==24)
                output.append (nums[i]+" - ("+nums[i+1]+" * "+nums[i+3]+") + "+nums[i+4] + " = 24");
            else if (((nums[i]/fHold)+nums[i+4])==24)
                output.append (nums[i]+" / ("+nums[i+1]+" * "+nums[i+3]+") + "+nums[i+4] + " = 24");
            else if (((nums[i]/fHold)-nums[i+4])==24)
                output.append (nums[i]+" / ("+nums[i+1]+" * "+nums[i+3]+") - "+nums[i+4] + " = 24");
            else if (((nums[i]+fHold)/nums[i+4])==24)
                output.append (nums[i]+" + ("+nums[i+1]+" * "+nums[i+3]+") / "+nums[i+4] + " = 24");
            else if (((nums[i]+fHold)-nums[i+4])==24)
                output.append (nums[i]+" + ("+nums[i+1]+" * "+nums[i+3]+") - "+nums[i+4] + " = 24");
            else value++;
            fHold=nums[i+1]-nums[i+3];

            if (((nums[i]*fHold)/nums[i+4])==24)
                output.append (nums[i]+" * ("+nums[i+1]+" - "+nums[i+3]+") / "+nums[i+4] + " = 24");
            else if (((nums[i]*fHold)+nums[i+4])==24)
                output.append (nums[i]+" * ("+nums[i+1]+" - "+nums[i+3]+") + "+nums[i+4] + " = 24");
            else if (((nums[i]/fHold)+nums[i+4])==24)
                output.append (nums[i]+" / ("+nums[i+1]+" - "+nums[i+3]+") + "+nums[i+4] + " = 24");
            else if (((nums[i]/fHold)*nums[i+4])==24)
                output.append (nums[i]+" / ("+nums[i+1]+" - "+nums[i+3]+") * "+nums[i+4] + " = 24");
            else value++;
            fHold=nums[i+1]/nums[i+3];

            if (((nums[i]-fHold)*nums[i+4])==24)
                output.append (nums[i]+" - ("+nums[i+1]+" / "+nums[i+3]+") * "+nums[i+4] + " = 24");
            else if (((nums[i]-fHold)+nums[i+4])==24)
                output.append (nums[i]+" - ("+nums[i+1]+" / "+nums[i+3]+") + "+nums[i+4] + " = 24");
            else if (((nums[i]*fHold)+nums[i+4])==24)
                output.append (nums[i]+" * ("+nums[i+1]+" / "+nums[i+3]+") + "+nums[i+4] + " = 24");
            else if (((nums[i]*fHold)-nums[i+4])==24)
                output.append (nums[i]+" * ("+nums[i+1]+" / "+nums[i+3]+") - "+nums[i+4] + " = 24");
            else if (((nums[i]+fHold)*nums[i+4])==24)
                output.append (nums[i]+" + ("+nums[i+1]+" / "+nums[i+3]+") * "+nums[i+4] + " = 24");
            else if (((nums[i]+fHold)-nums[i+4])==24)
                output.append (nums[i]+" + ("+nums[i+1]+" / "+nums[i+3]+") - "+nums[i+4] + " = 24"); 
            else value++;
            fHold=nums[i+1]+nums[i+3];

            if (((nums[i]*fHold)/nums[i+4])==24)
                output.append (nums[i]+" * ("+nums[i+1]+" + "+nums[i+3]+") / "+nums[i+4] + " = 24");
            else if (((nums[i]*fHold)-nums[i+4])==24)
                output.append (nums[i]+" * ("+nums[i+1]+" + "+nums[i+3]+") - "+nums[i+4] + " = 24");
            else if (((nums[i]/fHold)-nums[i+4])==24)
                output.append (nums[i]+" / ("+nums[i+1]+" + "+nums[i+3]+") - "+nums[i+4] + " = 24");
            else if (((nums[i]/fHold)*nums[i+4])==24)
                output.append (nums[i]+" / ("+nums[i+1]+" + "+nums[i+3]+") * "+nums[i+4] + " = 24");
            else value++;

            if (value == 192){
                output.append("There is no solution for this set of numbers");

                this.i ++;
            }
            position ++;
            eHold=nums[i+3];
            nums[i+3]=nums[i+4];
            nums[i+4]=eHold;
        }
        position ++;
        eHold=nums[i+1];
        nums[i+1]=nums[i+3];
        nums[i+3]=nums[i+4];
        nums[i+4]=eHold;
    }
    position ++;
    eHold=nums[i];
    nums[i]=nums[i+1];
    nums[i+1]=nums[i+3];
    nums[i+3]=nums[i+4];
    nums[i+4]=eHold;

}


public static void main(String[]args){
    java.util.Scanner input = new java.util.Scanner(System.in);
    System.out.println("Enter 4 numbers between 1 - 9");
    double w,x,y,z;
    Game Player1 = new Game();
    w = input.nextDouble();
    x = input.nextDouble();
    y = input.nextDouble();
    z = input.nextDouble();
    input.close();
    Player1.Solve(w,x,y,z);
}

} }

Stringbuffer doesn't really let you delete content (well it does but not on a line by line basis) you're probably better off creating a Set in which you add your lines. Stringbuffer并不能真正让您删除内容(可以删除内容,但不能逐行删除),最好创建一个Set以添加行。 Note, this is unordered which might not be ideal, but it will guarantee that you won't print the same string twice. 请注意,这是无序的,可能不理想,但是它将确保您不会两次打印相同的字符串。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM