2015-09-25 38 views
0

我想只接受用戶的號碼。如果他們輸入一個字母,此代碼適用於給他們一個錯誤消息。但是,如果他們碰到Enter或者只是空白區域,它就不起作用。我嘗試初始化稱爲測試的字符串爲空,然後設置scnr.nextLine()=測試,然後檢查測試是否爲空,但我不知道如何保持程序的其餘部分正確運行時,我做到了。掃描儀對我來說非常棘手。請幫忙!如何防止用戶輸入空格或僅在需要輸入數字時輸入?

 double mainNumber = 0; 

     System.out.print("Enter a number: "); 

      if (scnr.hasNextDouble()){ 
       mainNumber = scnr.nextDouble(); 
       System.out.println(mainNumber); 
       scnr.nextLine(); 
      } 
      else { 
       System.out.println("Sorry, please enter a number.\n"); 
       scnr.nextLine(); 
      } 
+0

該方案的目的是,我將採取存儲在mainNumber的值,並用它進行計算,然後,將結束。 – matthew

+1

定義「數字」......有整數,小數,十六進制/八進制/指數/ ..格式化數字,負數,複數,無理數等等。 –

+1

我發現引用「Console#echo(boolean) '在[這個線程](http://stackoverflow.com/questions/8138411/masking-password-input-from-the-console-java)和(私人)方法關閉用戶輸入回聲。有了這個,你可以爲控制檯編寫自己的輸入掩碼。 –

回答

4

只有在用戶輸入有效數字之前需要使用while循環和循環輸入。

此代碼

public static void main(String[] args) { 
    Scanner scnr = new Scanner(System.in); 
    double mainNumber = 0; 
    boolean isValidNumber = false; 

    System.out.print("Enter a number: "); 
    while (isValidNumber == false) { 
     String line = scnr.nextLine(); 
     try { 
      mainNumber = Double.valueOf(line); 
      isValidNumber = true; 
     } catch (NumberFormatException e){ 
      System.out.print("Sorry, please enter a number.\n"); 
     } 
    } 

    System.out.println("Main number is: " + mainNumber); 
} 

具有這種輸出樣本:

Enter a number: sdfgsgxb 
Sorry, please enter a number. 
xcvbxcvb 
Sorry, please enter a number. 
gsfdfgsdf 
Sorry, please enter a number. 
aearg 
Sorry, please enter a number. 
15.77 
Main number is: 15.77 
+1

好的工作,這是我準備提交的答案。或者,您可以使用具有相同條件的「do-while」循環,儘管這樣可以防止簡單打印「錯誤」消息。 – CubeJockey

0

您可以使用下面的代碼片段來讀取一個double值:

Scanner scanner = new Scanner(System.in); 
try { 
    double number = Double.parseDouble(scanner.nextLine()); 
} catch (NumberFormatException e) { 
    e.printStackTrace(); 
} 
+0

檢查標題:「如何防止用戶進入空格[012]」 –

+1

@BinkanSalaryman,我們有'java.lang.NumberFormatException:空字符串'如果用戶只輸入空格 – Andrew

+0

您的答案不是錯誤。但從接受的答案我可以看到這個問題表達不佳...... –

3

嗯,我想你的代碼是在一個while循環或東西嗎?所以它一直在詢問,直到用戶輸入正確的值。

然後,您應該(爲了方便起見)使用String str = scnr.nextString()而不是nextDouble()並分析它返回的字符串。

您可以使用str.trim()刪除空格(然後檢查是否字符串是空的,str.isEmpty()),並檢查它是否是一個數字,你可以使用正則表達式(How to check that a string is parseable to a double?任何正則表達式的教程,你可以找到)或使用此正則表達式: str.matches("\\d+")(如果str是數字,則返回true,但在此處不包含逗號)。

當然,不要忘記把你的字符串作爲雙重字符串:Double.parseDouble(str.replace(",","."));。我希望「替換」部分是顯而易見的;)