我刚开始使用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.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);
Run Code Online (Sandbox Code Playgroud)
当我尝试运行它时,我得到以下内容:(我可以输入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)
Run Code Online (Sandbox Code Playgroud)
如果有人能帮我找到错误或问题,真的很感激!
谢谢
NAC
nextDouble() 不处理行的结尾.因此,当您nextLine()再次呼叫时,它将输入您之前输入的enter(\n)作为输入.所以它正在跳过实际输入并吞下\n之前错过的输入nextLine().你应该nextLine()在真实之前打电话给另一个nextLine()(所以它会吞下\n).
如果您不想这样做,则应构建另一个Scanner而不是使用相同的对象.
这就是你的原因StringIndexOutOfBoundsException,opStr只是\n在这一点上.
| 归档时间: |
|
| 查看次数: |
376 次 |
| 最近记录: |