[英]How to use the value of a string that is yet to be set by scanner/system.in - Java
我正在尝试创建一个计算器。 这可能不是最有效的方法,但是我想对到目前为止的工作有所帮助。
package me.Nelsin.Calculator;
import java.text.DecimalFormat;
import java.util.Scanner;
public class Calculator {
public static void main(String args[]) {
double answer;
//2 numbers
System.out.println("Enter your first number: ");
Scanner fnumb = new Scanner(System.in);
double fnum = fnumb.nextDouble();
System.out.println("Enter your operation, *, /, +, -: ");
Scanner operation = new Scanner(System.in);
String op = operation.nextLine();
System.out.println("Enter your second number: ");
Scanner snumb = new Scanner(System.in);
double snum = snumb.nextDouble();
//Answers
if(op.equals("*")) {
answer = fnum * snum;
DecimalFormat df = new DecimalFormat("#.##");
System.out.println(df.format(answer));
}
if (op.equals("/")) {
answer = fnum / snum;
DecimalFormat df = new DecimalFormat("#.##");
System.out.println(df.format(answer));
}
if (op.equals("+")) {
answer = fnum + snum;
DecimalFormat df = new DecimalFormat("#.##");
System.out.println(df.format(answer));
}
if (op.equals("-")) {
answer = fnum - snum;
DecimalFormat df = new DecimalFormat("#.##");
System.out.println(df.format(answer));
}
System.out.println("Enter your operation, *, /, +, -: ");
Scanner operation2 = new Scanner(System.in);
String op2 = operation2.nextLine();
System.out.println("Enter your third number here: ");
Scanner tnumb = new Scanner(System.in);
double tnum = tnumb.nextDouble();
if (op2.equals("*")) {
double answer2 = answer * tnum;
DecimalFormat df = new DecimalFormat("#.##");
System.out.println(answer2);
}
}
}
所以我的错误在这里:
double answer2 = answer * tnum;
我相信这是因为直到用户运行该程序才设置答案。 错误:
The local variable may have not been initialised.
发生此错误的原因是因为您在if语句中设置了变量“ answer”。 修复错误,在条件如if后面添加else语句
...
else{
answer=0.0;
}
或更简单的解决方案是说:
double answer=0;
因为尚未初始化局部变量且局部变量没有默认值,您会得到错误。 声明变量时将其赋值。
double answer = 0.0;
Instance variables
被初始化为null或为其默认的原始值(如果它们是原始值)。
Local variables
未定义且未初始化,因此您有责任设置初始值。
所以改变这个double answer;
double answer = 0;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.