我用了一个case结构,常量是整型,但是我却不 能正确的读取一个整数,下面程序每次输出的结果都是“you choose error”该怎么办啊?举例如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class SwitchDemo
{
public static void main(String[] args) throws IOException
{
int num;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("please input int(1,2,3) to choose!");
num=br.read();
switch(num)
{
case 1:
System.out.println("you choose 1");
break;
case 2:
System.out.println("you choose 2");
break;
case 3:
System.out.println("you choose 3");
break;

default:
System.out.println("you choose errror");
break;
}
}
}我加了一条语句system.out.println(num);
但是输出的结果和我从键盘输入的不一样,所以错误一定在这里,那该怎么修改啊 ?

解决方案 »

  1.   

    应该这样写import java.util.*;
    class SwitchDemo 

    public static void main(String[] args)

    System.out.println("please input int(1,2,3) to choose!"); 
    Scanner sc = new Scanner(System.in);
    int num = sc.nextInt();switch(num) 

    case 1: 
    System.out.println("you choose 1"); 
    break; 
    case 2: 
    System.out.println("you choose 2"); 
    break; 
    case 3: 
    System.out.println("you choose 3"); 
    break; default: 
    System.out.println("you choose errror"); 
    break; 


      

  2.   

    谢谢楼上的。
    不过又晕了,我完全按照你的写法,在我的eclipse中提示Scanner类无法解析!。
    奇怪中,难道还有哪里不对吗?。。
      

  3.   

    import java.io.*; public class SwitchDemo 

    public static void main(String[] args) throws IOException 

    char num; 
    System.out.println("please input int(1,2,3) to choose:"); 
    num=(char) System.in.read();//System.out.println(num);
    switch(num) 

    case '1':  
    System.out.println("you choose 1"); 
    break; 
    case '2': 
    System.out.println("you choose 2"); 
    break; 
    case '3': 
    System.out.println("you choose 3"); 
    break; 
    default: 
    System.out.println("you choose errror"); 
    break; 

    }
      

  4.   

    InputStream将System.in的输入内容转换成了对应的ascii码,你输入a的话它就会输出97
      

  5.   

    直接改写case ‘1’ 就行了... 
    因为你从键盘接受的是字符型的... 
      

  6.   

    不过又晕了,我完全按照你的写法,在我的eclipse中提示Scanner类无法解析!。 
    导入import
      

  7.   

    我知道2楼的方法了,Scanner扫描器从jdk1。5以后才有的,但是我的jdk是1。4的,所以出现无法解析的错误!但楼上的方法不行的,不信自己可以是是,运行仍然只出现结果:you choose error.jdk1。4以前的版本应该怎么写啊 看来要版本升级了 !。呵呵~
      

  8.   

    晕!我已经帮你导入了import java.util.*;我可以运行,你为什么不能?
    你把我的代码复制过去运行.
      

  9.   

    java语言中采用的是Unicode编码,而不是ASCII码,在Unicode编码中,键盘上的数字0代表十六进制0030h,换成十进制就是48(3*16),也就是说Unicode的0对应着键盘上的48,所以你是得不出你想要的答案的,这样的话你输入1,程序的输出就是49,你输入2程序的输出就是50....以此类推...如果你把程序改一下就可以了,比如最简单的改法:把switch(num)夸号里的num改成num-48就肯定可以了.呵呵!拿分来!!
      

  10.   

    或者这样也可以.import java.io.*;
    class SwitchDemo 

    public static void main(String[] args) throws IOException

    System.out.println("please input int(1,2,3) to choose!"); 
    //Scanner sc = new Scanner(System.in);
    //int num = sc.nextInt();
    InputStreamReader isr=new InputStreamReader(System.in);
    char num=(char)isr.read();
    isr.close();switch(num) 

    case '1': 
    System.out.println("you choose 1"); 
    break; 
    case '2': 
    System.out.println("you choose 2"); 
    break; 
    case '3': 
    System.out.println("you choose 3"); 
    break; default: 
    System.out.println("you choose errror"); 
    break; 


    }
      

  11.   

    在eclipse中工程属性的页面中将compiler compliance level 设置为1.4即可解决。
      

  12.   

    import java.io.BufferedReader; 
    import java.io.IOException; 
    import java.io.InputStreamReader; public class AA

    public static void main(String[] args) throws IOException 

    int num; 
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
    System.out.println("please input int(1,2,3) to choose!"); 
    num=br.read()-48; switch(num) 

    case 1: 
    System.out.println("you choose 1"); 
    break; 
    case 2: 
    System.out.println("you choose 2"); 
    break; 
    case 3: 
    System.out.println("you choose 3"); 
    break; default: 
    System.out.println("you choose errror"); 
    break; 



    原来的不对是因为把ASC吗转成数字时会有便宜,而49正好是1。
      

  13.   

    写一个工具类
    import java.io.IOException;public class Info {
    private  java.io.BufferedReader br = null;
    private  String msg = ""; public Info() {
    try {
    br = new java.io.BufferedReader(new java.io.InputStreamReader(
    System.in));
    } catch (Exception e) {
    System.out.println(e.getMessage());
    }
    } public  String getStringValue() {
    try {
    msg = br.readLine();
    } catch (Exception e) {
    System.out.println(e.getMessage());
    }
    return msg;
    } public  int getIntValue() {
    return Integer.parseInt(getStringValue());
    } public float getFloatValue() {
    return Float.parseFloat(getStringValue());
    } public double getDoubleValue() {
    return Double.parseDouble(getStringValue());
    }}以后要接收键盘的输入,只需要调用这个类就可以了
    调用演示如下://先实例化Info类
    Info info = new Info();
    //调用getStringValue()方法就可以从键盘接收一个String类型的值
    //还有getIntValue() 和getFloatValue() ,getDoubleValue() 
    String value = info.getStringValue();
      

  14.   

    package JavaStudy;
    import java.io.*;public class INT { public static void main(String[] args) {
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
    System.out.println("please input int(1,2,3) to choose!");  try {
    int num = Integer.parseInt(br.readLine());
    switch(num) 

    case 1: 
    System.out.println("you choose 1"); 
    break; 
    case 2: 
    System.out.println("you choose 2"); 
    break; 
    case 3: 
    System.out.println("you choose 3"); 
    break;  default: 
    System.out.println("you choose errror"); 
    break; 
    }
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();


    }
    }
     这样就可以了,我调试过了
      

  15.   

    楼上正确
    需要采用Integer,整型包装类的parseInt()方法
      

  16.   

    在num=br.read();之后添加 

    num=num-48;

    然后就能得到你想要的了,因为是ascII码,不是你认为的1,2,3。
      

  17.   

    将num=br.read(); 改写为num=Integer.parseInt(br.read());
    您也可以查一下API里的Integer类的parseInt方法。