2013-09-30 92 views
0

剛剛啓動Java,所以它可能是一個簡單的問題,但無法找到像我這樣的任何問題,所以我想我會發佈一個。Switch Case Error Validation

我正在用選項1-8寫一個「主菜單」。我想出如何錯誤句柄,當有人類型的數字大於8並小於1的情況下,但我不知道如何給他們一個錯誤信息,如果他們輸入一個字符或字母...

while(menuChoice != 8) 
     { 
     //main menu that loops 

     switch(menuChoice) 
     { 
     case 1: 
      //code 
      break; 

     case 2: 
      //code 
      break; 

     case 3: 
      //code 
      break; 

     case 4: 
          //code 
      break; 

     case 5: 
      //code 
      break; 

     case 6: 
          //code 
      break; 

     case 7: 
          //code 
      break; 

     case 8: 
          //code 
      break; 

     default: 
      System.out.println("Error: Invalid Menu Selection."); 
      } 
     } 
+0

你的條件是不做你認爲它是什麼,也是。也許在決定如何處理唯一有效的輸入之前檢查輸入? –

+0

「menuChoice」是什麼類型,以及如何檢索它? –

+0

menuChoice是我的掃描儀名稱..我應該貼上這個標籤! – user2832187

回答

0

假設這個編譯,你問的是不可能的。你打開一個號碼,所以你不能檢查號碼是否是一個字符。如果可能的話,你的代碼不會被編譯。

您應該將用戶輸入作爲String並驗證字符串。如果該字符串中包含非數字值,則會發出錯誤。如果沒有,請將其轉換爲數字,然後執行您的開關。

更好的設計將是有一個驗證層。一旦輸入被驗證,就認爲此後有效。

僞代碼:

String input = // 
if (containsNonNumerics(input)) 
    throw error 
inputAsInt = castToInt(input) 
if (outOfRange(inputAsInt) 
    throw error 
switch //your current code goes here 
+0

我不知道switch只能處理數字值......這很有道理,因爲我已經嘗試了一切(到目前爲止我已經知道)來讓它工作!我會嘗試你的建議!謝謝! – user2832187

+0

@ user2832187我不是說它只能處理數字值。我在說,如果你說'x!= 2'並且代碼編譯了,那麼'x'必須是某種數字類型,所以它不能有字符值。我從你提供的代碼中推斷出一些細節。 –

0

首先,具有while循環是不會給你你想要的功能。您應該研究如何使用KeyAdapter以便能夠接收來自鍵盤的輸入事件,例如,一個數字被按下,然後你可以驗證它實際上是一個數字,如果是,你可以使用你的switch語句來確定正確的代碼來執行。

0

我猜測menuChoice是一個字符。在這種情況下,您可以進行手動檢查

if('0' <= mc && mc <= '9') { 
    // do your regular checks 
} 

如果它是一個字符串,然後做一個

try { 
    Integer.parseInt(mc) 
} catch (NumberFormatException e) { // Not a number. Do your error reporting stuff } 

HTH。

+0

對不起! menuChoice是我的掃描儀名稱。 – user2832187

+0

謝謝!我會嘗試你的建議! – user2832187

0

開關狀態僅適用於數字類型(int,byte,char,short)。如果您嘗試添加其他開關,那麼一般情況下,Compailer會允許您。但是,如果你以某種方式(或者其他方式)想要添加開關統計變量,那麼你必須檢查它是否符合規則,如果變量是你想要的類型。 實施例:

if(var instanceof String){ 
    System.out.println("Error we don't acceped type string"); 
} 
else{ 
    switch(var){ 
     .... 
    } 
} 
+0

好吧,我還不知道呢!我會嘗試的! – user2832187

0

使用進入while循環並顯示錯誤消息之前該功能。

public static boolean isNumeric(String str) 
{ 
    NumberFormat formatter = NumberFormat.getInstance(); 
    ParsePosition pos = new ParsePosition(0); 
    formatter.parse(str, pos); 
    return str.length() == pos.getIndex(); 
}