[英]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);
}
}
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.