2015-11-09 49 views
-1

试图在java上创建一个简单的计算器。没有错误出现在代码中。但它仍然不起作用。我错过了什么?Calculator int choice = Integer.parseInt(char_a); java

import java.util.Scanner; 

public class JavaApplication15 { 


    public static void main(String[] args) { 
    Scanner in = new Scanner(System.in); 



     System.out.println("This is a calculator. Enter a letter followed by a number to calculate it."); 
     System.out.println(" S = sine \n C = Cosine \n T = Tangent \n R = Square Root \n N = natural Log \n X = exit the program"); 
     String num = in.nextLine(); 

     String sValue = num.substring(2); 
     String char_a = num.substring(0); 

     int choice = Integer.parseInt(char_a); 
     double dValue = Double.parseDouble(sValue); 

     while (choice != 'x'){ 
     switch(choice){ 

      case 's': 
       Math.sin(dValue); 
       System.out.println("The sine of your number is " + dValue); 
       break; 
      case'c':  
       Math.cos(dValue); 
       System.out.println("The Cosine of your number is " + dValue); 
        break; 
      case't': 
       Math.tan(dValue); 
       System.out.println("The Tangent of your number is " + dValue); 
        break; 
      case'r': 
       Math.sqrt(dValue); 
       System.out.println("The square root of your number is " + dValue); 
        break; 
      case'n':  
       Math.log(dValue); 
       System.out.println("The Log of your number is " + dValue); 
        break; 
      case'x': 
       break; 

     } 
     } 

    } 

} 
+5

请扩大“不起作用”,因为这并不能告诉我们很多事情可以帮助我们理解您的问题。 –

+0

有可能是一些错误。但这是一个明显的例子:在Math.sin(dValue)语句中,您计算​​值的正弦值,然后将结果丢弃。如果你想使用它,你必须把结果赋值给某个东西。 – ajb

回答

1

我想我会看到你的错误。

您正在使用Math类执行操作,但未将操作结果分配回您的变量。

例如,Math.cos(dValue);也许应该dValue = Math.cos(dValue);

0

有你的代码的几个问题。

首先,您没有正确使用.substring方法。它返回从指定索引到字符串结尾的所有内容。因此对于用户输入“S 4”

sValue等于“4”,但char_a等于“S 4”。

您使用的串法的方法是:

value = input.substring(2); 
operation = input.substring(0,1); 

我真的建议你使用这样的:

params = input.split(" "); 

然后,你必须:

params[0] // as your command 

params[1] // as your value 

这样您就不必担心每个位实际占用多少个符号。

接下来,不要像这样将你的命令转换为char。我以前的建议意味着你确实应该使用类似

if (params[0].equals("sin")) { 

} else if (params[0].equals("cos")) { 

} else { 
// catch unknown command 
} 

但是,你可以转换到通过简单的字符:

sValue.toCharArray()[0] 

而且,没有理由为什么你的switch语句应该是在一段时间循环。没有什么可以连续完成的,它只会继续打印相同的答案。最后,阿杰说,你计算价值并扔掉它们,同时打印旧的价值。您必须使用:

System.out.println("The Tangent of your number is " + Math.tan(dValue)); 
+0

我对你的主要建议是,当你的代码不能像你期望的那样工作时使用调试器,因为它可以帮助你在追踪执行时逐个找出你的问题。 – rudolfovic

+0

我应该添加为什么你不应该使用'Integer.parseInt()'。它会抛出一个'NumberFormatException',这意味着你提供的字符串实际上不是一个数字。它适用于像“2.0”而不是“a”的字符串。其次,你的'substring'使用的另一个问题是你不检查什么,这是非常糟糕的。'split()'可以让你检查数组的大小并根据它做出决定(用户提供了足够的参数吗?)。否则,你也会得到'ArrayIndexOutOfBoundsException',你不想要:) – rudolfovic