Java 初学者试图编写一个简单的计算器
我刚开始使用Java,并试图编写一个简单的计算器: 我尝试了以下方法:Java 初学者试图编写一个简单的计算器,java,exception,Java,Exception,我刚开始使用Java,并试图编写一个简单的计算器: 我尝试了以下方法: double x, y; //inputs Scanner sc = new Scanner(System.in); System.out.println("x?"); x = sc.nextDouble(); System.out.println("y?"); y = sc.nextDouble(); double answer = 0; System.o
double x, y; //inputs
Scanner sc = new Scanner(System.in);
System.out.println("x?");
x = sc.nextDouble();
System.out.println("y?");
y = sc.nextDouble();
double answer = 0;
System.out.println("Operation type: (+,-,*,/)");
String opStr= sc.nextLine();
char op = opStr.charAt(0);
switch(op)
{
case '+':
answer=x+y;
break;
case '-':
answer=x-y;
break;
case '*':
answer=x*y;
break;
case '/':
if (y==0)
{
System.out.println("Error, can't divide by zero");
}
else
{
answer=x/y;
}
break;
default: System.out.println("Unkown operation");
} // switch end
System.out.println("answer = " +x+op+y+"=" + answer);
当我试着运行它时,我得到了以下信息:我可以输入x和y,但是之后我得到了错误消息
Operation type: (+,-,*,/)
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(String.java:686)
at edf_1.EDF_1.main(EDF_1.java:170)
Java Result: 1
BUILD SUCCESSFUL (total time: 3 seconds)
如果有人能帮我找到错误或问题,我将不胜感激
谢谢
NaC不处理行的末尾。因此,当您再次呼叫时,它会将您之前输入的输入作为输入。因此,它跳过了实际输入,并从nextLine错过的上一个输入中\n吞下该输入。您应该在真正的下一行之前调用另一个下一行,这样它将吞下\n
如果您不想这样做,您应该构造另一个扫描仪,而不是使用相同的对象
这就是您的原因,opStr在这一点上只是一个\n。问题是,在读取double后,扫描仪输入不是空的。因此,调用nextLine会立即返回,返回上一个输入中不可解析为浮点值的部分,该部分可能为空。如果您在请求操作之前调用sc.nextLine,那么对sc.nextLine的下一次调用将读取包含您的操作的行。当我开始学习java时,我构建了世界上最简单的计算器。这对您来说应该很好:
import java.util.Scanner;
public class CalculatorProgram {
Scanner scan = new Scanner(System.in);
int N1;
int N2;
int O = 0;
System.out.println("Enter the first number:");
N1 = scan.nextInt();
System.out.println("Enter the second number:");
N2 = scan.nextInt();
System.out.println("Press 1 for addition, 2 for subtraction, 3 for multiplication, 4 for division
O=scan.nextInt();
switch (O){
case 1:
O=N1+N2;
System.out.println(O);
break;
case 2:
O=N1-N2;
System.out.println(O);
break;
case 3:
O=N1*N2;
System.out.println(O);
break;
case 4:
O=N1/N2;
System.out.println(O);
break;
default:
System.out.println("That is an invalid selection. Thank you for using this program.");
break;
}
}
}
不客气。在拍摄x和y后是否清空缓冲区?如果没有,下一行将为您执行此操作,并且将为opStr分配一个空行,因此charAt0将触发一个异常;系统输出打印结果;