Java 使用bufferedreader获取输入

Java 使用bufferedreader获取输入,java,input,bufferedreader,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("usag

我想以以下格式进行输入:
-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(" ");
    }
  }
静态双奖_输入(字符串列表[])引发IOException{
布尔标志=假;
双p=0;
while(true){
if(list.length!=2 | |(list[0].compareTo(“-prize”)!=0)){
System.out.println(“用法:-奖励”);
flag=true;
}
其他的
{
试一试{
p=Double.parseDouble(列表[1]);
flag=false;
}
捕获(例外e){
flag=true;
}
}
如果(!标志)
返回p;
其他的
list=br.readLine().split(“”);
}
}

当我输入:
-prize abc
时,第二个参数也是一个字符串,它会提示我从用户处输入另一个enter键,而不是显示相应的消息。请告诉我我遗漏了什么,以及我应该如何纠正它。

您在服用期间的情况正在好转(正确)作为循环条件,并且您正在接受一个输入,在该输入中,循环将永远进行,并且缓冲区读取器将等待下一行被拆分。

用法:-仅当此条件失败时才会打印奖品

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

  • 用户没有提供两个元素
  • 如果第一个元素不是
    -prize
由于对于
-price aaa
这两个条件都已满足,因此用户不会看到此信息,但表示数据正确性的
标志将在解析第二个参数失败时设置为
false
,因此在

else
    list = br.readLine().split(" ");
程序将等待新的数据表单

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

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

不清楚你在找什么。你能解释一下你的输入和预期的输出吗?实际上问题是BuffrdRead忽略了R和\n,我想考虑一下,有什么办法吗?输入应该是一行,我真的不知道。我通常用扫描器,你试过了吗?没有,我没试过。我想扫描器中的nextLine()会带来你想要的。只需谷歌一下,看看关于它的书。它现在工作得很好,不需要使用扫描仪,也不需要我在输入错误的输入后按任何键,比如-prize aa。你能解释一下它有什么问题吗?只有在以前的数据不包含两个元素时,或者如果第一个参数不是
-prize
,但在确认第二个参数错误后(在
catch
块中),你才打印要求新数据的信息。所以,当你确定数据是错误的时候,不要在两个地方打印它,只打印一次。最佳位置是在执行
readLine()
之前,它将等待用户提供新数据。@puppy7 BTW,而不是神秘的
列表[0]。compareTo(“-prize”)!=0
您可以使用
列表[0].equals(“-prize”)
它更易于读取、写入、维护,并且是比较对象(如字符串)的标准方式。
else{
    System.out.println("usage: -prize <Itemprize>");
    list = br.readLine().split(" ");
}