2014-11-23 4 views
0

Я пытаюсь создать игру 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); 
    } 
} 
+0

Вы вообще ничего не получаете? Выполняется ли оператор 'println()' во второй строке 'main()'? – APerson

+0

println() во второй строке main() запускается. no other output – tomanc

ответ

0
  1. двойной вход? вы уверены, что не хотите использовать int?
  2. Вы не печатаете результат в консоли. просто попробуйте найти все инструкции 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]); 
        } 
    } 
    
+0

Я удалил оператор if все вместе. Он не нужен – tomanc

0

Я подозреваю, что ваша логика не так, поэтому вы никогда не ударяя метод append(String). Если вы его отлаживаете, вы увидите, что value только когда-либо достигает 32, а не 192, которые вы ожидаете.

Кроме того, как только вы попали метод append (попробуйте 1,1,3,7), вы получите NullPointerException при попытке оценить ans[c].equals(ans[d]) потому ans[c] равна нулю.

+0

Я не могу понять, почему моя логика ошибочна. Не могу ли я получить ошибку во время выполнения, если я неправильно использовал метод добавления? – tomanc

+0

Я понял, почему моя логика была неправильной. Теперь для этого исключения NullPointerException. Как я могу проверить, равны ли элементы, если они начинаются с нуля? – tomanc

+0

Я использовал цикл, чтобы установить все элементы массива в '" "", после чего я изменил метод 'append', чтобы он присваивал' (String equation) 'элементу массива и THEN сравнивал его. Однако теперь моя распечатка - это все пустые строки. 'public void append (String equation) { \t \t Строковый текст = уравнение; \t \t для (int e = 0; e tomanc

Смежные вопросы