Я пытаюсь создать игру 24 в java для практики. Игра «24» - это арифметическая игра, в которой цель состоит в том, чтобы найти способ манипулировать четырьмя целыми числами, так что конечный результат равен 24. Сложение, вычитание, умножение или деление в любом порядке чисел может использоваться для создания четырех цифр операции от одного до девяти равных 24.Не могу понять, почему моя программа не печатает содержимое массива
правил просты: вы должны использовать каждый номер только один раз и только 4 цифры, которые читались от пользователя, чтобы найти одно уравнения для получения 24
Моего вопроса Я не получаю никаких результатов после завершения программы. Проблема может быть в методе append (String equation), который используется для предотвращения дублирования ответов и добавления правильных уравнений в массив ans. Или это может быть где-то еще. Я просто не могу понять, что это за жизнь.
Edited Код:
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);
}
}
Вы вообще ничего не получаете? Выполняется ли оператор 'println()' во второй строке 'main()'? – APerson
println() во второй строке main() запускается. no other output – tomanc