2014-11-21 3 views
0

연습 할 Java에서 24 게임을 만들려고합니다. 24 게임은 4 개의 정수를 조작하여 최종 결과가 24가되도록하는 방법을 찾는 산술 게임입니다. 숫자의 임의의 순서로 더하기, 빼기, 곱하기 또는 나눗셈을 사용하여 네 자리 숫자를 만들 수 있습니다 하나 구 동일한 24내 코드가 인쇄를 계속하는 이유를 알아 내려고 시도합니다.

규칙의 작업은 간단합니다 : 당신이 한 번만 각 번호를 사용해야 하나 개의 방정식을 찾기 위해 사용자로부터 읽은에만 4 개 개의 숫자는 기본적으로 24

을 얻기 위해 내 문제는 == 24 StringBuffer 출력에 방정식을 추가하려고합니다. StringBuffer 잘못 사용하고 있습니다. 모든 방정식을 StringBuffer에 추가 한 다음 StringBuffer를 콘솔에 인쇄하기 전에 모든 중복 방정식을 삭제하려고합니다. 그러나 모든 방정식이 인쇄 되더라도 그 이유는 확실하지 않습니다. 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); 
} 

}

답변

0

StringBuffer를 정말 당신이 내용을 삭제하지 않습니다 (잘 수행하지만 라인별로 라인) 당신은 아마 당신이 당신의 라인을 추가하는 설정을 만드는 것이 더 낫다 . 이것은 이상적이지 않을 수도있는 순서가 없지만 같은 문자열을 두 번 인쇄하지 않을 것이라는 점에 유의하십시오.