为什么这个java计算器给我这个答案?

时间:2014-07-12 09:43:26

标签: java calculator

我自己做了一个计算器:

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

我做错了什么?

1 个答案:

答案 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()获取*字符。