2014-04-21 146 views
0

removeplayer USER1分割功能問題?

代碼工作正常與控制檯上面的輸入。它爲我成功移除了玩家'user1'。但是,如果用戶沒有提及任何用戶名,則會提示刪除數組列表中的所有玩家。

removeplayer(緊接着輸入),下面的代碼失敗,因爲str [1]沒有在這裏。 但是我希望str [1]好像這個值爲null,這有助於我移除所有玩家。

param="0"; 

System.out.print(">"); 

//type_op= in.next(); 

String str=in.nextLine(); 

String[] str1=str.split(" "); 

type_op = str1[0]; 

param = str1[1]; 

String[] param_split = param.split(","); 

if(type_op.equals("removeplayer") && param.equals(null)) 

removeAllPlayers(); 

else if(type_op.equals("removeplayer")) 

removeplayer(); 

我已經嘗試使用下一個()爲好,但在這種情況下,問題變得如在這種情況下只有removeAllPlayers()的工作更加複雜。

+0

我不確定問題是什麼......當用戶只在控制檯中寫入'removeplayer'時會發生錯誤嗎?如果是這樣,你必須檢查'str1.length'是否爲1.如果是,則分配'param = null'。如果不是,則分配'param = str1 [1]'。 –

+0

是的,現在通過檢查str1的長度爲1來工作。乾杯! – MrCoder

+0

我得到了這個工作。然而,這些代碼[System.out.print(「>」); String str = in.nextLine();]在任何操作完成後會運行一次額外的時間。這發生在我的三個操作中。我調試並檢查了什麼是問題,但我不知道什麼是錯的。有趣的是,上述兩條線爲一些操作運行了一次額外的時間。編譯器進入in.nextLine(),不會要求我輸入內容,然後在下一次迭代中重新運行,以求輸入。其中一個迭代發生在沒有輸入任何值的情況下。 – MrCoder

回答

3

一個簡單的解決辦法是立即檢查,以便其中str1陣列要知道,如果沒有指定用戶,通過檢查數組長度:

param = "0"; 

System.out.print(">"); 

//type_op= in.next(); 
String str = in.nextLine(); 

String[] str1 = str.split(" "); 

type_op = str1[0]; 

if (type_op.equals("removeplayer") && str1.length == 1) { 
    removeAllPlayers(); 
} else if (type_op.equals("removeplayer")) { 

    param = str1[1]; 

    String[] param_split = param.split(","); 

    removeplayer(); 
} 

這僅僅是一個簡單快捷的解決方案,但它應該管用。 我希望這會幫助你。

+0

真棒!這工作完美。非常感謝尼古拉。 – MrCoder

+0

我得到了這個工作。然而,這些代碼[System.out.print(「>」); String str = in.nextLine();]在任何操作完成後會運行一次額外的時間。這發生在我的三個操作中。我調試並檢查了什麼是問題,但我不知道什麼是錯的。有趣的是,上述兩條線爲一些操作運行了一次額外的時間。編譯器進入in.nextLine(),不會要求我輸入內容,然後在下一次迭代中重新運行,以求輸入。其中一個迭代發生在沒有輸入任何值的情況下。 – MrCoder

+0

你的問題不是很清楚。所以,我想你的'in'對象是一個Scanner in = new Scanner(System.in);對?因此,在讀取in.nextLine()之前,可能已經在緩衝區中存在一些回車符,這可能是由於之前與用戶的一些交互。如果是這種情況,你可以看看這個問題:http://stackoverflow.com/questions/18273751/flush-clear-system-in-stdin-before-reading – WoDoSc

0

只要將它作爲比較

如果(type_op.equals( 「removeplayer」)& & PARAM == NULL

removeAllPlayers();

+0

這不會工作,因爲數組超出了界限。 str [1]不存在。我通過檢查str1的大小來實現這一點。 – MrCoder