A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 nine789 于 2015-4-29 22:09 编辑

来基础班三天了,现在遇到了一个问题,以前绝对想不到,打死我我也做不出来一个计算器

遇到一个问题,求大神帮忙解答。
我想要做的是一个计算器
但是运行后结果是错误的。
后来改了改,还是不行。。。。下面的代码是我修改后的,修改了一半。。。。求解答
  1. import java.util.Scanner;
  2. class CounterDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 Scanner a1=new Scanner(System.in);
  7.                 System.out.print("输入两个数值,进行计算(只可以计算:+、-、*、/、%、^、&等\n只可计算两个数字,请输入计算公式)");
  8.                 int x=a1.nextInt();



  9.                 Scanner a3=new Scanner(System.in);
  10.                 int y=a3.nextInt();

  11.                 Scanner a2=new Scanner(System.in);
  12.                 String z=a2.nextLine();


  13.                 getCounter(x,y,z);
  14.                 //getCounter(z);
  15.                 //getCounter(y);
  16.         }

  17.         public static void getCounter(int x,int y,String z)
  18.         {
  19.                 //String z ="null";
  20.                 switch(z)
  21.                 {
  22.                         case "+":
  23.                                 System.out.println("x"+"z"+"y="+(x+y));
  24.                                 break;
  25.                         case "-":
  26.                                 System.out.println("x"+"z"+"y="+(x-y));
  27.                                 break;
  28.                         case "*":
  29.                                 System.out.println("x"+"z"+"y="+(x*y));
  30.                                 break;
  31.                         case "/":
  32.                                 System.out.println("x"+"z"+"y="+(x/y));
  33.                                 break;
  34.                         case "%":
  35.                                 System.out.println("x"+"z"+"y="+(x%y));
  36.                                 break;
  37.                         case "^":
  38.                                 System.out.println("x"+"z"+"y="+(x^y));
  39.                                 break;
  40.                         case "&":
  41.                                 System.out.println("x"+"z"+"y="+(x&y));
  42.                                 break;
  43.                         default:
  44.                                 System.out.println("输入的为非法数值,回火星上去吧");
  45.                 }
  46.         }
  47. }
复制代码

没有写注释,应该都能看懂吧?   要是看不懂的话,,,,,,那我随后补上
如果不用方法封装的话,或许可以实现这个计算器,不用方法封装,就不存在 数据类型不匹配的结果了


***************************************************************************************
下面是 正确的代码,可以运行的。(没有用方法封装)不用方法封装的话,是可以运行的。
  1. import java.util.Scanner;
  2. class CounterDemo12
  3. {
  4.         public static void main(String [] args)
  5.                 {
  6.                                 Scanner h = new Scanner (System.in);
  7.                                 System.out.println("请输入一个数字:");
  8.                                 int x = h.nextInt();

  9.                                 Scanner h2 = new Scanner (System.in);
  10.                                 System.out.println("请输入+、-、*、/、%、^、&进行运算:");
  11.                                 String y = h2.nextLine();

  12.                                 Scanner h3 = new Scanner (System.in);
  13.                                 System.out.println("请输入另一个数字:");
  14.                                 int z = h3.nextInt();
  15.                                 System.out.println("*************下面显示运算结果*************");
  16.                                 switch (y)
  17.                                 {
  18.                                 case "+":
  19.                                         System.out.println(x+"+"+z+"="+(x+z));
  20.                                         break;
  21.                                 case "-":
  22.                                         System.out.println(x+"-"+z+"="+(x-z));
  23.                                         break;
  24.                                 case "*":
  25.                                         System.out.println(x+"*"+z+"="+(x*z));
  26.                                         break;
  27.                                 case "/":
  28.                                         System.out.println(x+"/"+z+"="+(x/z));
  29.                                         break;
  30.                                 case "%":
  31.                                         System.out.println(x+"%"+z+"="+(x%z));
  32.                                         break;
  33.                                 case "^":
  34.                                         System.out.println(x+"^"+z+"="+(x^z));
  35.                                         break;
  36.                         
  37.                                 case "&":
  38.                                         System.out.println(x+"&"+z+"="+(x&z));
  39.                                         break;
  40.                                 default:
  41.                                         System.out.println("输入错误,回你的火星上去吧!");
  42.                                         break;
  43.                 }
  44.         }
  45. }
复制代码







其实 Scanner h  和Scanner   h3     是可以使用一个对象的,因为他们都是int  类型!

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

33 个回复

倒序浏览
有没有人帮忙解答啊,大神赶快出来了

版主要给你们加技术分了   技术分了
回复 使用道具 举报
加油加油
回复 使用道具 举报
你把switch语句中的 输出语句搞成这个格式。。。         
System.out.println(x+z+y+"="+(x-y));
你加双引号,系统直接输出了。。。
回复 使用道具 举报
鸡脑壳 发表于 2015-4-28 23:57
你把switch语句中的 输出语句搞成这个格式。。。         
System.out.println(x+z+y+"="+(x-y));
你加双 ...

不是 输出的问题,是输入时的问题,如果不封装方法的话,或许可是实现。
但是现在用了方法封装重新调用,因为String 类型里面包含空格,和回车   所以在键盘输入的时候,会遇到问题,这不是输出的问题,是输入数据时的问题
回复 使用道具 举报
本帖最后由 nine789 于 2015-4-29 00:09 编辑

下面是可以编译,可以运行的代码

就是在输入数据的时候 因为String 包含的有 空格 和回车
所以再输入的时候,会出现问题
求大神解决
  1. import java.util.Scanner;
  2. class CounterDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 Scanner a1=new Scanner(System.in);
  7.                 System.out.print("输入两个数值,进行计算(只可以计算:+、-、*、/、%、^、&等\n只可计算两个数字,请输入计算公式)");
  8.                 int x=a1.nextInt();
  9.                 String z=a1.nextLine();
  10.                 int y=a1.nextInt();



  11.                 /*Scanner a3=new Scanner(System.in);
  12.                 int y=a3.nextInt();

  13.                 Scanner a2=new Scanner(System.in);
  14.                 String z=a2.nextLine();
  15. */

  16.                 getCounter(x,z,y);//  不用
  17.                 //getCounter(z);
  18.                 //getCounter(y);
  19.         }

  20.         public static void getCounter(int x,String z,int y)
  21.         {
  22.                 //String z ="null";
  23.                 switch(z)
  24.                 {
  25.                         case "+":
  26.                                 System.out.println("x"+"z"+"y="+(x+y));
  27.                                 break;
  28.                         case "-":
  29.                                 System.out.println("x"+"z"+"y="+(x-y));
  30.                                 break;
  31.                         case "*":
  32.                                 System.out.println("x"+"z"+"y="+(x*y));
  33.                                 break;
  34.                         case "/":
  35.                                 System.out.println("x"+"z"+"y="+(x/y));
  36.                                 break;
  37.                         case "%":
  38.                                 System.out.println("x"+"z"+"y="+(x%y));
  39.                                 break;
  40.                         case "^":
  41.                                 System.out.println("x"+"z"+"y="+(x^y));
  42.                                 break;
  43.                         case "&":
  44.                                 System.out.println("x"+"z"+"y="+(x&y));
  45.                                 break;
  46.                         default:
  47.                                 System.out.println("输入的为非法数值,回火星上去吧");
  48.                 }
  49.         }
  50. }
复制代码



回复 使用道具 举报
不会。。。
回复 使用道具 举报
switch 不支持字符串作为条件,你可尝试用枚举类型写
回复 使用道具 举报
winelx 中级黑马 2015-4-29 00:28:59
9#
也就是路过看看
回复 使用道具 举报
nine789 发表于 2015-4-29 00:08
下面是可以编译,可以运行的代码

就是在输入数据的时候 因为String 包含的有 空格 和回车

这是你代码是这样写的
  • Scanner a1=new Scanner(System.in);
  •                 System.out.print("输入两个数值,进行计算(只可以计算:+、-、*、/、%、^、&等\n只可计算两个数字,请输入计算公式)");
  •                 int x=a1.nextInt();
  •                 Scanner a3=new Scanner(System.in);
  •                 int y=a3.nextInt();
  •                 Scanner a2=new Scanner(System.in);
  •                 String z=a2.nextLine();
你这几条语句意思表示

(省略一段话)x(回车)
y(回车)
z(回车)
这是你代码表示的


而你的思路似乎是:
想用String类型一次性输入
这样的话就只需要留下
  •    Scanner a2=new Scanner(System.in);
  •                 String z=a2.nextLine();
然后把这个String类分解成字符数组:char[] chs = z.toCharArray();
然后在对字符数组里的值或者符号进行判断运算就可以了









回复 使用道具 举报
One_M 中级黑马 2015-4-29 01:26:39
11#
public static void getCounter(int x,int y,String z)   正常输入不是 符号在中间么...这个是不是顺序不对啊 具体没去编译...
回复 使用道具 举报
  1. package com.itheima;

  2. import java.util.Scanner;

  3. class Test21 {
  4.         public static void main(String[] args) {
  5.                 Scanner sc = new Scanner(System.in);
  6.                 System.out.print("输入两个数值,进行计算(只可以计算:+、-、*、等\n只可计算两个数字,请输入计算公式)");
  7.                 int x = sc.nextInt();
  8.                 Scanner sc1 = new Scanner(System.in);
  9.                 String y = sc1.nextLine();
  10.                 Scanner sc2 = new Scanner(System.in);
  11.                 int z = sc2.nextInt();
  12.                 getCounter(x, y, z);

  13.         }

  14.         private static void getCounter(int x, String y, int z) {
  15.                 switch (y) {
  16.                 case "+":
  17.                         System.out.println(x + "+" + z + "=" + (x + z));
  18.                         break;
  19.                 case "-":
  20.                         System.out.println(x + "-" + z + "=" + (x - z));
  21.                         break;
  22.                 case "*":
  23.                         System.out.println(x + "*" + z + "=" + (x * z));
  24.                         break;
  25.                 case "/":
  26.                         System.out.println(x + "/" + z + "=" + (x / z));
  27.                         break;
  28.                 case "%":
  29.                         System.out.println(x + "%" + z + "=" + (x % z));
  30.                         break;
  31.                 case "^":
  32.                         System.out.println(x + "^" + z + "=" + (x ^ z));
  33.                         break;
  34.                 case "&":
  35.                         System.out.println(x + "&" + z + "=" + (x & z));
  36.                         break;
  37.                 default:
  38.                         System.out.println("输入的为非法数值,回火星上去吧");
  39.                 }
  40.         }

  41. }
复制代码

球给点分吧 谢谢
回复 使用道具 举报
第三天就能做计算器啦。。。腻害啊。
回复 使用道具 举报
就是啊,三天就能做计算器啦,是不是基础班潜藏了很多牛人。。。
回复 使用道具 举报
yearn 中级黑马 2015-4-29 09:18:50
15#
菜鸟围观!
回复 使用道具 举报
看看!!!!
回复 使用道具 举报
switch不能判断字符串吧?我觉得你用if(str.equals())试试
回复 使用道具 举报
哥,你基础班三天就学了Scanner???  是不是真的啊?
回复 使用道具 举报
switch不可以接收String
回复 使用道具 举报
本帖最后由 大西洋 于 2015-4-29 16:33 编辑

直接输入公式计算结果的话,用 Python 可以做到~
Java写的话,需要配合GUI和键盘事件~  键盘点击后再把完整的公式显示出来;我写了一下基础代码(无GUI),如下:其实和你写的差不多,呵呵,只是没有给方法传参数,接收动态输入;
  1. import java.util.Scanner;

  2. class CalcTest {
  3.         
  4.         public void calc(){
  5.                 try {
  6.                         Scanner scan = new Scanner(System.in);
  7.                         System.out.print("请输入第一个数:      ");
  8.                         float num1 = scan.nextFloat();
  9.                         System.out.print("运算符 +、-、*、/:");
  10.                         String ca = scan.next();
  11.                         System.out.print("请输入第二个数:        ");
  12.                         float num2 = scan.nextFloat();
  13.                         //判断运算符
  14.                         switch (ca) {
  15.                         case "+":
  16.                                 System.out.println(num1+" + "+num2+" = "+(num1 + num2));
  17.                                 break;
  18.                         case "-":
  19.                                 System.out.println(num1+" - "+num2+" = "+(num1 - num2));
  20.                                 break;
  21.                         case "*":
  22.                                 System.out.println(num1+" * "+num2+" = "+(num1 * num2));
  23.                                 break;
  24.                         case "/":
  25.                                 System.out.println(num1+" / "+num2+" = "+(num1 / num2));
  26.                                 break;
  27.                         default:
  28.                                 System.out.println("运算符输入错误~!");
  29.                                 break;
  30.                         }
  31.                 } catch (Exception e) {
  32.                         System.out.println("输入错误,请您输入正确的数字");
  33.                 }
  34.         }
  35.         
  36.         public static void main(String[] args) {
  37.                 new CalcTest().calc();
  38.         }
  39. }
复制代码

分别输入123 /
2
输出结果:
  1. 请输入第一个数:     123
  2. 运算符 +、-、*、/:   /
  3. 请输入第二个数:      2
  4. 123.0 / 2.0 = 61.5
复制代码











回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马