簡體   English   中英

使用bufferedreader進行輸入

[英]Taking input using 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 ,其中第二個參數也是一個字符串,它提示我從用戶輸入另一個輸入鍵,而不是顯示相應的消息。 請告訴我我錯過了什么,我應該如何糾正它。

當你正在接受(true)作為一個循環條件時,你的條件就是你的狀態,並且你正在接受一個輸入,其中循環將永遠存在,並且緩沖讀取器等待下一行被分割。

usage: -prize <Itemprize>僅在此條件失敗時才會打印

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

所以只有這樣

  • 用戶沒有提供兩個元素,
  • 如果第一個元素不是 -prize

因為對於-price aaa兩個條件都滿足,因此用戶不會看到此信息,但是在解析第二個參數失敗時,表示數據正確性的flag將被設置為false ,因此在

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

程序將等待新的數據表單

為了改善用戶體驗,您應該在從用戶那里讀取新數據之前打印使用信息,因此請嘗試移動線路

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

就在br.readLine()之前

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM