尝试在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;
}
}
}
}
答案 0 :(得分:1)
我想我看到了你的错误。
您正在使用Math类执行操作,但未将操作结果分配回变量。
例如,Math.cos(dValue);
应该是dValue = Math.cos(dValue);
答案 1 :(得分:0)
您的代码存在一些问题。
首先,您没有正确使用.substring方法。它返回从您指定的索引到String结尾的所有内容。因此对于用户输入“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
}
但是,您只需通过以下方式转换为char:
sValue.toCharArray()[0]
此外,没有理由说你的switch语句应该在while循环中。没有什么是可以连续完成的,它只会继续打印相同的答案。最后,ajb说,你计算值并抛弃它们,同时打印旧值。你必须使用:
System.out.println("The Tangent of your number is " + Math.tan(dValue));