2013-11-01 4 views
0
package calculator; 

import java.util.Scanner; 

/** 
* @author zhoushi15 
*/ 
public class Calculator { 
    public static double num1; 
    public static double num2; 
    public static String opp; 
    /** 
    * @param args the command line arguments 
    */ 
    public static double sum; 

    public static void main(String[] args) { 
     // TODO code application logic here 
     boolean quit; 
     String calculator; 
     String exp; 
     System.out.print("Welcome to the AP Computer Science calculator!!"); 
     Scanner input = new Scanner(System.in); 
     boolean calc = false; 
     while (calc == false) { 
      System.out.print("Enter an expression, or quit to exit: "); 
      exp = input.nextLine(); 
      if (exp.equalsIgnoreCase("quit")) { 
       System.out.println("Thanks for stopping by!"); 
       calc = true; 
      } else { 
       token(exp); 
       System.out.println(exp + "=" + sum); 
      } 
     } 
    } 

    public static void token(String x) { 
     Scanner jz = new Scanner(x); 
     if (jz.hasNextDouble()) { 
      if (jz.hasNextDouble()) { 
       num1 = jz.nextDouble(); 
      } else { 
       System.out.println("error! It is not a number."); 
      } 
      if (jz.hasNext()) { 
       opp = jz.next(); 
      } 
      if (jz.hasNextDouble()) { 
       num2 = jz.nextDouble(); 
      } 
     } else if (jz.hasNext()) { 
      if (jz.hasNext()) { 
       opp = jz.next(); 
      } 
      if (jz.hasNextDouble()) { 
       num1 = jz.nextDouble(); 
      } 
     } 
    } 

    public static void opp(double num1, String opp, double num2) { 
     if (opp.equals("+")) { 
      sum = num1 + num2; 
     } else if (opp.equals("-")) { 
      sum = num1 - num2; 
     } else if (opp.equals("*")) { 
      sum = num1 + num2; 
     } else if (opp.equals("/")) { 
      sum = num1/num2; 
     } 
    } 

    public static void opp2(String opp, double num1) { 
     if (opp.equals("|")) { 
      sum = Math.abs(num1); 
     } else if (opp.equals("v")) { 
      sum = Math.sqrt(num1); 
     } else if (opp.equals("~")) { 
      sum = Math.round(num1); 
     } else if (opp.equals("s")) { 
      sum = Math.sin(num1); 
     } else if (opp.equals("c")) { 
      sum = Math.cos(num1); 
     } else if (opp.equals("t")) { 
      sum = Math.tan(num1); 
     } 
    } 
} 

내 코드 내 입력, 출력 is0.0 4 + 5,하지만 문제 및 해결 방법을하는 어디 내가 찾을 수 있으며, answer.for 예를 포기하지 않을 입니다.왜 내 Java 계산기 코드가 작동하지 않습니까?

+1

* 들여 쓰기를 수정하십시오. – NPE

+8

디버거로 코드를 실행하십시오. – dbf

+1

테스트에서 hasNextDouble()이 두 번 연속으로 테스트 되었습니까? – kviiri

답변

4

main 메소드를 살펴보면 변수 sum에 값을 할당하거나 그렇게하는 메소드를 호출하지 않습니다. 따라서 계산기는 항상 double 값의 초기 초기화 값인 0.0으로 결과를 인쇄합니다. oppopp2은 자동으로 사용되지 않으므로 실제로 호출해야합니다.

2

프로그램에는 몇 가지 디자인 문제가 있습니다. 현재 main 함수는 opp, num1 및 num2를 설정하는 token()을 호출합니다. 그런 다음 주 인쇄물과 주 인쇄물로 돌아갑니다.

실제로 num1과 num2로 작업해야합니다. opp의 값에 따라 token1() 또는 opp2()를 호출하거나, token() 다음에 main1 또는 opp2()를 호출하십시오. 대신

else{ 
    token(exp); 
    if(opp == "+"){ 
      sum = opp(num1, opp, num2); 
    } 
    else{ 
      sum = opp2(num1, num2); 
    } 
    System.out.println(exp + "=" + sum); 
} 

else { 
    token(exp); 
    System.out.println(exp + "=" + sum); 
} 

는 하나님의 사랑을 위해 모든 변수와 메소드 이름을 이름을 변경하시기 바랍니다. 그렇게하면 모든 것이 더 이해가됩니다.

1

호출되지 않는, 즉이다 - 단지 당신이 적어도 문제가 시작 위치를 확인할 수 있으며, 디버거를 사용하여 프로그램을 실행하려고 :)

할당되지 않은 (초기화 된) 것에 대해 ppl이 말한 것은 사실이며, 이것이 입력 한 모든 결과에서 0.0을 얻는 이유입니다. 당신이 디버거를 실행한다면

당신은 jz.hasNextDouble() 항상 반환 것을 알 것이다 허위 이후 jz.hasNext() true를 반환하고 op의 결과는 사용자가 입력 한 모든 표현을, 그리고 그 시점에서 당신은 token 방법을 떠나 당신의 sum를 인쇄하고 있는지

2

으로 많은 PPL 지적 왜 당신은 결코 sum GHD oppopp2 방법을 지정하지 않습니다

관련 문제