简体   繁体   English

无法弄清楚为什么我的程序不打印数组内容

[英]Can't figure out why my program is not printing contents of array

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个。

My issue is I am not receiving any output after the program completes. 我的问题是程序完成后我没有收到任何输出。 The issue could be in the append(String equation) method which is used to prevent duplicate answers and to add the correct equations to the ans array. 问题可能出在append(String equation)方法中,该方法用于防止重复的答案并将正确的方程式添加到ans数组。 Or it could be somewhere else. 也可能在其他地方。 I just can't figure it out for the life of me. 我只是无法解决我的一生。

Edited Code: 编辑代码:

public class TwentyFourGame {

    String [] ans = new String[20];
    boolean [] used = new boolean[20];
    int count = 0;
    int value = 0;

    public void Solve(double w, double x, double y, double z){
        double [] nums = {w,x,y,z};
        double eHold=0, fHold=0;

        //Replaces null array elements with empty string to avoid NPE
        for(int d=0; d<ans.length;d++){
            ans[d] = "";
        }

        for (int a=0;a< 4; a++){
            for (int b=0;b< 3; b++){
                for (int c=0;c<2; c++){
                    fHold = nums[2]+nums[3];
                    if (((nums[0]/nums[1])*fHold)==24)
                        append (nums[0]+" / "+nums[1]+" * ("+nums[2]+" + "+nums[3]+")" + " = 24");
                    else if (((nums[0]/nums[1])-fHold)==24)
                        append (nums[0]+" / "+nums[1]+" - ("+nums[2]+" + "+nums[3]+")" + " = 24");
                    else if (((nums[0]*nums[1])-fHold)==24)
                        append (nums[0]+" * "+nums[1]+" - ("+nums[2]+" + "+nums[3]+")" + " = 24");
                    else if (((nums[0]*nums[1])/fHold)==24)
                        append (nums[0]+" * "+nums[1]+" / ("+nums[2]+" + "+nums[3]+")" + " = 24");
                    else if (((nums[0]-nums[1])*fHold)==24)
                        append (nums[0]+" - "+nums[1]+" * ("+nums[2]+" + "+nums[3]+")" + " = 24");
                    else if (((nums[0]-nums[1])/fHold)==24)
                        append (nums[0]+" - "+nums[1]+" / ("+nums[2]+" + "+nums[3]+")" + " = 24");
                    else value++;
                    fHold=nums[2]-nums[3];

                    if (((nums[0]/nums[1])*fHold)==24)
                        append (nums[0]+" / "+nums[1]+" * ("+nums[2]+" - "+nums[3]+")" + " = 24");
                    else if (((nums[0]/nums[1])+fHold)==24)
                        append (nums[0]+" / "+nums[1]+" + ("+nums[2]+" - "+nums[3]+")" + " = 24");
                    else if (((nums[0]*nums[1])+fHold)==24)
                        append (nums[0]+" * "+nums[1]+" + ("+nums[2]+" - "+nums[3]+")" + " = 24");
                    else if (((nums[0]*nums[1])/fHold)==24)
                        append (nums[0]+" * "+nums[1]+" / ("+nums[2]+" - "+nums[3]+")" + " = 24");
                    else if (((nums[0]+nums[1])*fHold)==24)
                        append (nums[0]+" + "+nums[1]+" * ("+nums[2]+" - "+nums[3]+")" + " = 24");
                    else if (((nums[0]+nums[1])/fHold)==24)
                        append (nums[0]+" + "+nums[1]+" / ("+nums[2]+" - "+nums[3]+")" + " = 24");
                    else value++;
                    fHold=nums[2]*nums[3];

                    if (((nums[0]/nums[1])-fHold)==24)
                        append (nums[0]+" / "+nums[1]+" * ("+nums[2]+" * "+nums[3]+")" + " = 24");
                    else if (((nums[0]/nums[1])+fHold)==24)
                        append (nums[0]+" / "+nums[1]+" + ("+nums[2]+" * "+nums[3]+")" + " = 24");
                    else if (((nums[0]-nums[1])+fHold)==24)
                        append (nums[0]+" - "+nums[1]+" + ("+nums[2]+" * "+nums[3]+")" + " = 24");
                    else if (((nums[0]-nums[1])/fHold)==24)
                        append (nums[0]+" - "+nums[1]+" / ("+nums[2]+" * "+nums[3]+")" + " = 24");
                    else if (((nums[0]+nums[1])-fHold)==24)
                        append (nums[0]+" + "+nums[1]+" - ("+nums[2]+" * "+nums[3]+")" + " = 24");
                    else if (((nums[0]+nums[1])/fHold)==24)
                        append (nums[0]+" + "+nums[1]+" / ("+nums[2]+" * "+nums[3]+")" + " = 24");
                    else value++;
                    fHold=nums[2]/nums[3];

                    if (((nums[0]-nums[1])*fHold)==24)
                        append (nums[0]+" - "+nums[1]+" * ("+nums[2]+" / "+nums[3]+")" + " = 24");
                    else if (((nums[0]-nums[1])+fHold)==24)
                        append (nums[0]+" - "+nums[1]+" + ("+nums[2]+" / "+nums[3]+")" + " = 24");
                    else if (((nums[0]*nums[1])+fHold)==24)
                        append (nums[0]+" * "+nums[1]+" + ("+nums[2]+" / "+nums[3]+")" + " = 24");
                    else if (((nums[0]*nums[1])-fHold)==24)
                        append (nums[0]+" * "+nums[1]+" - ("+nums[2]+" / "+nums[3]+")" + " = 24");
                    else if (((nums[0]+nums[1])*fHold)==24)
                        append (nums[0]+" + "+nums[1]+" * ("+nums[2]+" / "+nums[3]+")" + " = 24");
                    else if (((nums[0]+nums[1])-fHold)==24)
                        append (nums[0]+" + "+nums[1]+" - ("+nums[2]+" / "+nums[3]+")" + " = 24");
                    else value++;
                    fHold=nums[1]*nums[2];

                    if (((nums[0]-fHold)/nums[3])==24)
                        append (nums[0]+" - ("+nums[1]+" * "+nums[2]+") / "+nums[3] + " = 24");
                    else if (((nums[0]-fHold)+nums[3])==24)
                        append (nums[0]+" - ("+nums[1]+" * "+nums[2]+") + "+nums[3] + " = 24");
                    else if (((nums[0]/fHold)+nums[3])==24)
                        append (nums[0]+" / ("+nums[1]+" * "+nums[2]+") + "+nums[3] + " = 24");
                    else if (((nums[0]/fHold)-nums[3])==24)
                        append (nums[0]+" / ("+nums[1]+" * "+nums[2]+") - "+nums[3] + " = 24");
                    else if (((nums[0]+fHold)/nums[3])==24)
                        append (nums[0]+" + ("+nums[1]+" * "+nums[2]+") / "+nums[3] + " = 24");
                    else if (((nums[0]+fHold)-nums[3])==24)
                        append (nums[0]+" + ("+nums[1]+" * "+nums[2]+") - "+nums[3] + " = 24");
                    else value++;
                    fHold=nums[1]-nums[2];

                    if (((nums[0]*fHold)/nums[3])==24)
                        append (nums[0]+" * ("+nums[1]+" - "+nums[2]+") / "+nums[3] + " = 24");
                    else if (((nums[0]*fHold)+nums[3])==24)
                        append (nums[0]+" * ("+nums[1]+" - "+nums[2]+") + "+nums[3] + " = 24");
                    else if (((nums[0]/fHold)+nums[3])==24)
                        append (nums[0]+" / ("+nums[1]+" - "+nums[2]+") + "+nums[3] + " = 24");
                    else if (((nums[0]/fHold)*nums[3])==24)
                        append (nums[0]+" / ("+nums[1]+" - "+nums[2]+") * "+nums[3] + " = 24");
                    else value++;
                    fHold=nums[1]/nums[2];

                    if (((nums[0]-fHold)*nums[3])==24)
                        append (nums[0]+" - ("+nums[1]+" / "+nums[2]+") * "+nums[3] + " = 24");
                    else if (((nums[0]-fHold)+nums[3])==24)
                        append (nums[0]+" - ("+nums[1]+" / "+nums[2]+") + "+nums[3] + " = 24");
                    else if (((nums[0]*fHold)+nums[3])==24)
                        append (nums[0]+" * ("+nums[1]+" / "+nums[2]+") + "+nums[3] + " = 24");
                    else if (((nums[0]*fHold)-nums[3])==24)
                        append (nums[0]+" * ("+nums[1]+" / "+nums[2]+") - "+nums[3] + " = 24");
                    else if (((nums[0]+fHold)*nums[3])==24)
                        append (nums[0]+" + ("+nums[1]+" / "+nums[2]+") * "+nums[3] + " = 24");
                    else if (((nums[0]+fHold)-nums[3])==24)
                        append (nums[0]+" + ("+nums[1]+" / "+nums[2]+") - "+nums[3] + " = 24"); 
                    else value++;
                    fHold=nums[1]+nums[2];

                    if (((nums[0]*fHold)/nums[3])==24)
                        append (nums[0]+" * ("+nums[1]+" + "+nums[2]+") / "+nums[3] + " = 24");
                    else if (((nums[0]*fHold)-nums[3])==24)
                        append (nums[0]+" * ("+nums[1]+" + "+nums[2]+") - "+nums[3] + " = 24");
                    else if (((nums[0]/fHold)-nums[3])==24)
                        append (nums[0]+" / ("+nums[1]+" + "+nums[2]+") - "+nums[3] + " = 24");
                    else if (((nums[0]/fHold)*nums[3])==24)
                        append (nums[0]+" / ("+nums[1]+" + "+nums[2]+") * "+nums[3] + " = 24");
                    else value++;

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

                        this.count ++;
                    }
                    // 0=a 1=b 2=c 3=d
                    eHold=nums[2];
                    nums[2]=nums[3];
                    nums[3]=eHold;
                }
                eHold=nums[1];
                nums[1]=nums[2];
                nums[2]=nums[3];
                nums[3]=eHold;
            }
            eHold=nums[0];
            nums[0]=nums[1];
            nums[1]=nums[2];
            nums[2]=nums[3];
            nums[3]=eHold;

            for (int j=0; j<ans.length;j++){
                if (ans[j] != "")
                    System.out.println(ans[j]);
            }
        }
    }


    //Method used to check if there are duplicates in the array of equations
    public void append(String equation){
        String text = equation;

        for (int e=0;e<used.length;e++){
            if (used[e]==false){
                ans[e] = text;
                used[e] = true;
                break;
            }
        }

        //Check if elements in the array are the same
        for (int c=0;c<ans.length;c++){
            for (int d = 0; d < ans.length; d++) {
                //if elements are the same do nothing
                if (ans[c].equals(ans[d])){
                    ans[d] = "";
                }
            }
        }
    }


    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;
        TwentyFourGame Player1 = new TwentyFourGame();
        w = input.nextDouble();
        x = input.nextDouble();
        y = input.nextDouble();
        z = input.nextDouble();
        input.close();
        Player1.Solve(w,x,y,z);
    }
}
  1. double input? 双输入? are you sure you don't want to use int? 您确定不想使用int吗?
  2. you does not print any result into console. 您不会将任何结果打印到控制台中。 just try to find all System.out.println(...) statements. 只需尝试查找所有System.out.println(...)语句。

     int value = 0; if (value == 192){ // <== Here value == 0, so this condition is always FALSE. And print never happens. for (int i=0; i<ans.length;i++){ System.out.println(ans[i]); } } 

I suspect your logic is wrong, which is why you're never hitting the append(String) method. 我怀疑您的逻辑是错误的,这就是为什么您从未使用过append(String)方法的原因。 If you debug it, you'll see that value only ever reaches 32, not the 192 that you're expecting. 如果调试它,您将看到该value仅达到32,而不是您期望的192。

Also, once you do hit the append method (try 1,1,3,7), you get a NullPointerException when you try to evaluate ans[c].equals(ans[d]) because ans[c] is null. 另外,一旦您点击了append方法(尝试1,1,3,7),由于ans[c]为null,则在尝试评估ans[c].equals(ans[d])时会收到NullPointerException

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

相关问题 我无法弄清楚为什么我的程序在运行时没有打印 - I can't figure out why my program isn't printing when I run it 我无法弄清楚为什么用数组覆盖文件的内容导致空文件 - I can't figure out why overwriting a file's contents with an array results in an empty file 基本Java的输出不打印。 不知道为什么 - Output of basic Java not printing. Can't figure out why 我不明白为什么我的程序没有循环 - I can't figure out why my program isn't looping 当我尝试运行程序时,GUI无法加载,我无法弄清楚为什么 - When i try to run my program, the GUI won't load and I can't figure out why 您好,我似乎无法弄清楚为什么我的程序无法正常工作 - Hello I can't seem to figure out why my program isn't working 在进入下一个语句之前,我无法弄清楚为什么我的程序的一部分循环4次 - I can't figure out why part of my program is looping 4 times before moving on to the next statements 无法弄清楚为什么程序无法正常运行 - Can't figure out why the program will not run properly 我不知道为什么我的数组没有填写 Java - I can't figure out why my array isn't filling here in Java 无法弄清楚为什么我在我的数组print语句中获取空值 - Can't figure out why im getting null values in my array print statement
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM