使用bufferedreader进行输入

时间:2015-01-19 18:15:56

标签: java input bufferedreader

我想采用以下格式输入:-prize 45

这是我的代码

static double prize_input(String list[]) throws IOException{
    boolean flag=false;
    double p=0;
    while(true){
        if(list.length!=2 || ( list[0].compareTo("-prize")!=0 ) ){
            System.out.println("usage: -prize <Itemprize>");
            flag=true;
        }
        else
        {
                try{
                    p=Double.parseDouble(list[1]);
                    flag=false;
                }
                catch(Exception e){
                    flag=true;
                }
        }
        if(!flag)
            return p;
        else
            list=br.readLine().split(" ");
    }
  }

当我输入:-prize abc,其中第二个参数也是一个字符串,它会提示我输入另一个来自用户的输入键,而不是显示相应的消息。请告诉我我错过了什么以及如何纠正它。

2 个答案:

答案 0 :(得分:0)

你的条件是因为你正在接受(true)作为一个循环条件而且你正在接受一个输入,其中循环将永远存在,并且缓冲读取器等待下一行被分割。

答案 1 :(得分:0)

仅当此情况失败时才会打印

usage: -prize <Itemprize>

if (list.length != 2 || (list[0].compareTo("-prize") != 0)) 

所以只有

  • user 没有提供两个元素
  • 并且如果第一个元素不是 -prize

由于-price aaa两个条件都已满足,因此用户不会看到此信息,但表示数据正确性的flag将在解析第二个参数失败时设置为false,因此在< / p>

else
    list = br.readLine().split(" ");

程序将等待新数据表单

为了改善用户体验,您应该在从用户那里读取新数据之前打印使用信息,因此请尝试移动行

System.out.println("usage: -prize <Itemprize>");

br.readLine()之前

else{
    System.out.println("usage: -prize <Itemprize>");
    list = br.readLine().split(" ");
}