2013-11-01 81 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); 
     } 
    } 
} 

我的代码 不是 给answer.for例如,我的输入是4 + 5,然后输出is0.0,但我找不到在哪里的问题,以及如何解决它。为什么我的java计算器代码不工作?

+1

请*请*修正缩进。 – NPE

+8

用调试器运行你的代码。 – dbf

+1

连续两次测试hasNextDouble()是什么? – kviiri

回答

4

看看您的main方法,您永远不会为变量sum赋值或调用一个方法。因此,您的计算器始终打印结果为0.0,这是双打的默认初始值。 oppopp2不会自动使用,您需要实际调用它们。

2

你的程序有几个设计问题。目前主要将调用token(),它设置opp,num1和num2。然后,它返回到主,然后主要打印0.

你需要实际上做一些与num1和num2。要么令token()根据opp的值调用opp1()或opp2(),要么在token()后面调用opp1()或opp2()。

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

代替

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

而且对上帝的爱,请重新命名所有的变量和方法名。一切都会对你更有意义。

1

你永远分配sum GHD oppopp2方法不被调用,这就是为什么

2

正如许多PPL指出的 - 只是尝试使用调试器运行您的程序,然后就可以看到其中至少这些问题开始:)

什么样的脂肪酶有关总和没有被分配(只有初始化)说是真实的,这就是为什么你得到0.0作为你输入的一切结果的原因。

如果你将与调试器中运行,你会发现,jz.hasNextDouble()总是返回false,随后jz.hasNext()返回true,这导致op是你已经进入了整体表达,在这一点上,你离开token方法和打印sum

相关问题