我自己做了一个计算器:
import java.io.*;
public class Jcal_00_b2 {
/**
* @param args the command line arguments
* @throws java.io.IOException
*/
public static void main(String[] args) throws IOException {
int a;
a = 0;
int b;
b = 0;
int res = 0;
String c;
String men;
BufferedReader ra = new BufferedReader(new InputStreamReader (System.in));
BufferedReader rb = new BufferedReader(new InputStreamReader (System.in));
BufferedReader rc = new BufferedReader(new InputStreamReader (System.in));
BufferedReader rmen = new BufferedReader(new InputStreamReader (System.in));
System.out.println("Jcal 0.0 b2.....type start to add type help for help and credits.");
men= rmen.readLine();
if(men.equals("")){
System.out.println("Give input please");
men= rmen.readLine();
}else if(men.equals("start")){
System.out.println("Type first number");
a=(int) ra.read();
System.out.println("Type Second number");
b=(int) rb.read();
System.out.println("Type operation (*,/,+,-)");
c=rc.readLine();
if(c.equals("+")){
res=a+b;
}else if(c.equals("-")){
res=a-b;
}else if(c.equals("*")){
res=a*b;
}else if(c.equals("-")){
res=a/b;
}
System.out.println("result:" +res);
System.out.println("You gave input: \n 1st no.="+a+"\n 2nd no.="+b );
}else if(men.equals("help")){
System.out.print("first type start to start the calc.\n then input first number, input second number then input the operator. \n the operator symbols are as follows:\n + for addition \n - for subtraction \n * for multiplication \n / for division ");
}
}
}
当我运行它时,它显示以下输出:
Jcal,计算器.....类型开始添加类型帮助以获得帮助和信用。
启动
输入第一个号码
1
键入第二个数字
1
键入操作(*,/,+, - )
*
结果:2401
你给了输入:
第1号= 49
第二号= 49
我做错了什么?
答案 0 :(得分:5)
您的问题是read
BufferedReader
方法返回BufferedReader
中单个字符的ASCII值。单个数字'1'
的ASCII值为49
。
您可能需要考虑使用Scanner
而不是BufferedReader
,而是使用nextInt()
方法。那你就不会有这个问题了。
此外,您只需要一个Scanner
个对象,而不是每个您想要读取的值。
还有一件事需要注意 - 您可以在nextLine()
对象上调用Scanner
,但如果您刚刚调用nextInt()
,则可能会有额外的换行符与操作员打开的行前的字符。您可能需要拨打nextLine()
两次。也就是说,Scanner
可能包含"1 newline 1 newline * newline"
之类的内容 - 在这种情况下,您需要调用nextInt()
(获取前1个),nextInt()
(至获得第二个1),nextLine()
(以获取第二个换行符),然后再次nextLine()
获取*
字符。