2013-11-01 3 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, который является инициализированным значением по умолчанию для удвоений. opp и opp2 не используются автоматически, вам действительно нужно их называть.

2

В вашей программе несколько проблем с дизайном. В настоящее время main вызовет токен(), который устанавливает opp, num1 и num2. Затем он возвращается к основному, а затем к основным отпечаткам.

Вам нужно на самом деле что-то сделать с num1 и num2. Либо есть token() вызывают opp1() или opp2() на основе значения opp, либо имеют основной вызов 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 opp и opp2 методов не вызываются, поэтому

2

Как много госзакупок отметили - просто попробуйте запустить программу с отладчиком, то вы можете увидеть, где начинаются по крайней мере, проблемам :)

Что говорит ppl о не назначенной сумме (только инициализированной), является истиной, и это является причиной, по которой вы получаете 0.0 в результате всего, что вы вводите.

Если будет работать с отладчиком вы бы заметить, что jz.hasNextDouble() всегда возвращает ложь и впоследствии jz.hasNext() возвращает истину, и что приводит к op быть все выражение, которое вы ввели, и в этот момент вы покидаете token метод и печать вашего sum

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