2012-11-09 117 views
1

嗨我不知道我是否可以在if語句的時候進行驗證,因此只有當用戶使用它們的參數輸入命令「移動」「線條」「圓圈」時,程序纔會執行。例如,如果用戶輸入「移動200」,則程序會說因爲只有一個或NO參數而無效。 謝謝!Java while循環輸入驗證

import java.util.Scanner; 

public class DrawingProgram1 { 

public static void main(String[] args) { 

    GraphicsScreen g = new GraphicsScreen(); 

    String store; 
    String command; 

    int move1; 
    int move2; 
    int line1; 
    int line2; 
    int circle; 

    while (true) { 
     Scanner scan = new Scanner(System.in); 
     System.out.println("Type 'help' for list of commands. Type 'end' to finish."); 
     System.out.println("Please enter a command:"); 
     store = scan.nextLine(); 
     String [] splitUpText = store.split(" "); 
     command = splitUpText[0]; 


     if (command.equalsIgnoreCase("move")) { 
      move1 = Integer.parseInt(splitUpText[1]); 
      move2 = Integer.parseInt(splitUpText[2]); 
      g.moveTo(move1, move2); 

     } 
     else if (command.equalsIgnoreCase("line")) { 
      line1 = Integer.parseInt(splitUpText[1]); 
      line2 = Integer.parseInt(splitUpText[2]); 
      g.lineTo(line1, line2); 
     } 
     else if (command.equalsIgnoreCase("circle")) { 
      circle = Integer.parseInt(splitUpText[1]); 
      g.circle(circle); 
     } 
     else if (command.equalsIgnoreCase("help")) { 
      System.out.println("Enter a command for move."); 
      System.out.println("Enter a command for line."); 
      System.out.println("Enter a command for circle."); 
     } 
     else if (command.equalsIgnoreCase("end")) { 
      System.exit(0); 
     } 
     else { 
      System.out.println("Error"); 
     } 
    } 





} 

} 
+0

您可能會強制用戶使用其他輸入格式,例如移動:「200」 – Luke94

+0

只需檢查'splitUpText'的長度。如果它不是3,則在顯示消息後繼續while循環。 –

回答

1

您可能有錯誤數量的參數或無效參數。用這個來抓住他們的全部:

if (command.equalsIgnoreCase("move")) { 
    try { 
     move1 = Integer.parseInt(splitUpText[1]); 
     move2 = Integer.parseInt(splitUpText[2]); 
     g.moveTo(move1, move2); 
    } catch (ArrayIndexOutOfBoundsException e1) { 
     Sytem.out.println("Please specify 2 parameters!") 
     continue; 
    } catch (NumberFormatException e2) { 
     Sytem.out.println("Invalid parameters!") 
     continue; 
    } 
} 
+0

相當醜陋 - 爲什麼不簡單檢查splitUpText的長度呢? – assylias

+1

,因爲無論如何他需要爲'NumberFormatException'嘗試'try \ catch',這樣他總是可以爲他的命令添加參數並實現他們的動作,而不必記住更新'if'語句。 – jlordo

+1

非常感謝! – Parakis

0

替換此

if (command.equalsIgnoreCase("move")) { 
    move1 = Integer.parseInt(splitUpText[1]); 
    move2 = Integer.parseInt(splitUpText[2]); 
    g.moveTo(move1, move2); 
} 

蒙山

if (command.equalsIgnoreCase("move")) { 
    try { 
     move1 = Integer.parseInt(splitUpText[1]); 
     move2 = Integer.parseInt(splitUpText[2]); 
     g.moveTo(move1, move2); 
    } catch (ArrayIndexOutOfBoundsException e) { 
     Sytem.out.println("move needs 2 parameters!") 
     continue; 
    } 
} 

和應用給你的其他命令。

+0

相當醜陋 - 爲什麼不簡單檢查splitUpText的長度呢? – assylias

0

您可以使用:

if (splitUpText.lenght() != 3) 
    System.err.println("Invalid..."); 
2

在這種情況下,添加額外的條件if語句,用於例如,你可以說

if(command.equalsIgnoreCase("move") && splitUpText.length == 3){ 

//do necessary actions 
} 

的移動命令,數組的大小應不大於或等於3.

根據每個命令的參數爲其他if語句添加條件。

+0

非常感謝! – Parakis

1

如果你把所有這些請求包裝在Command對象中怎麼辦?我認爲命令設計模式適合你的情況。 Command pattern explanation