代码片断如下: 一输入完a 按回车 就弹出异常
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
char flag = (char)System.in.read();
//System.in.read();
String str;
if(flag=='a')
{
System.out.println("请输入要产生的迷宫的大小 size=");
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        str = br.readLine();         
        size = Integer.parseInt(str);    //!!!这行出错 inputMaze(size);
}

解决方案 »

  1.   

    想不通啊 我都还没输入呢 怎么就出错了!
    那个a的输入应该是没问题的。
    一进入if语句就异常了
    代码到底哪里有问题啊 求各位大侠帮忙看看啊...
      

  2.   

    read() 是读入下一个字节数据(只读一个,也就是输入ab它只读到a).
    输入带a的字符,是肯定会进入if的,而进入后  new BufferedReader(new InputStreamReader(System.in))又读不到内容,所以就报空指针了.
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class Test { /**
     * @param args
     */
    public static void main(String[] args) {
    try {
    while (true) {
    BufferedReader br = new BufferedReader(new InputStreamReader(
    System.in));
    String flag = br.readLine();
    String str;
    if ("a".equals(flag)) {
    do {
    System.out.println("请输入要产生的迷宫的大小 size=");
    br = new BufferedReader(
    new InputStreamReader(System.in));
    str = br.readLine();
    Pattern p = Pattern.compile("\\d+");
    Matcher m = p.matcher(str);
    if (m.matches()) {
    int size = Integer.parseInt(str);
    System.out.println(size);
    break;
    } else {
    System.out.println("请输入数字.");
    }
    } while (true);
    break;
    }
    }
    } catch (NumberFormatException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }}
      

  3.   

    说错了,是报java.lang.NumberFormatException: For input string: "" 异常,对空字符做数字类型转换.
      

  4.   

    iwhile (true) {
    System.out.println("请输入a继续,q退出!");
    BufferedReader br = new BufferedReader(new InputStreamReader(
    System.in));
    String flag = br.readLine();
    String str;
    if ("a".equals(flag)) {
    do {
    System.out.println("请输入要产生的迷宫的大小 size=");
    br = new BufferedReader(
    new InputStreamReader(System.in));
    str = br.readLine();
    Pattern p = Pattern.compile("\\d+");
    Matcher m = p.matcher(str);
    if (m.matches()) {
    int size = Integer.parseInt(str);
    System.out.println(size);
    break;
    } else {
    System.out.println("请输入数字.");
    }
    } while (true);
    break;
    }else if("q".equals(flag))
    {
    break;
    }
    }
      

  5.   

    >_<
    这位大侠,你说了这么多,感觉不是很懂呐
    我只输入了一个a啊,没有多余的输入了,
    a之后的回车应该不会被读入的吧,呃 不清楚- -||
    a的输入没问题的呐,因为能够正确进入我的if语句
    关键下面那个咋就空字符串了呢,它咋根本没等我输入呢...
    呃,感觉就是这个问题了,readLine难道不是应该是要等着用户输入一个字符串的么??
      

  6.   


    char flag = (char)System.in.read();
    System.in.read();
    System.in.read();
    String str;自己解决了,这样就行了
    晕倒,可是还是不懂啊
    为什么要两个System.in.read();
    本来我一直只加了一句System.in.read();用来把回车读掉的
    啊 看不懂了,求大侠们解释啊~~~
      

  7.   


    楼主试试输入abc回车,看看。
      

  8.   

    第二个System.in.read();改为int c=System.in.read();然后打印出c,其值为10,说明读入了‘/n’字符,也就是回车键代表的字符
      

  9.   

    啊哦 那第一个System.in.read();呢 哎呀 先顶上 明儿有空再看~