2012-09-29 17 views
0

這是我的第一個問題。我是計算機科學專業的第二年級學生,在正確閱讀幾個輸入時遇到了一些麻煩。我正在創建一個接受一系列命令的棋盤遊戲。如何檢查未知數量的輸入java並停止在行尾檢查

這是一些問題的代碼看起來像:

要求用戶輸入一個這樣的命令看起來是這樣的:create 0 0 fast flexible,或者是這樣的:create 0 0,與整數是任何價值和快速的或者靈活的可以在沒有另一個的情況下進入。

if((keyboard.next()).equals("create")) 
{ 
    xValue = keyboard.nextInt(); 
    yValue = keyboard.nextInt(); 

if((keyboard.next().equals("fast"))) 
{ 
     pieceType = "FP"; 
     if((keyboard.next().equals("flexible"))) 
     { 
      pieceType = "FF"; 
     } 
    } 


if((keyboard.next().equals("flexible"))) 
{ 
     pieceType = "SF"; 
     if((keyboard.next().equals("fast"))) 
     { 
      pieceType = "FF"; 
     } 
} 
} 

程序一直需要7個輸入。

如何在用戶按下Enter後停止檢查輸入?

+0

你真的應該在這種情況下使用枚舉(而不是'pieceType = 「」')。 – LanguagesNamedAfterCofee

+0

該程序需要7個輸入,因爲這就是你所做的。你應該用只讀一行代替你的7'keyboard.next()'調用,然後在'space'標誌處拆分它,然後檢查權限令牌。 – svz

回答

1

我想你可以根據白色空格拆分整個字符串,然後按字(或部分)按順序處理字符串。無論如何,你應該謹慎地聲明整個輸入。

0

嘗試

String NEW_LINE_SIGN = "\n"; 
if (keyboard.next().contains(NEW_LINE_SIGN){ /* .... */ } 
0

這應該工作...

Scanner kbd = new Scanner(System.in); 
kbd.useDelimiter(System.getProperty("line.separator")); 
//you could create a rule automatically with some kind of a rules engine 
if(kbd.hasNext("create(\\s+)(\\d+)(\\s+)(\\d+)(\\s+)(fast|flexible)(\\s+)(fast|flexible)")) { 
    MatchResult res = kbd.match(); 
    for(int i = 0; i <= res.groupCount(); ++i) { 
     System.out.println(res.group(i)); 
     //handleRules(res.group(i), i); 
    } 
} 
kbd.close();