2017-08-30 49 views
-1

有沒有辦法以某種方式減少或壓縮傳遞給main這些參數的參數的數量?假設我有一個Ludo遊戲,我需要傳遞玩家人數,姓名,顏色,玩家類型(人類,計算機),計算機玩家的AI類型。這是很多爭論。如何減少傳遞給主體的參數數量

我不認爲我可以使用Effective Java中描述的任何技術。有沒有什麼聰明的方法來實現這一目標?

+0

有很多方法可以從某人獲取信息,那麼您對我們有什麼期望?告訴你如何從控制檯讀取輸入(已經在這裏回答),如何讀取文件(這裏已經回答),如何從數據庫中讀取(已經在這裏回答)或者如何從網頁讀取(已經在這裏回答)?那麼請大家停止提出不清楚和過於寬泛的問題? – Tom

+0

您可以將設置存儲在屬性文件中。 –

+0

所以你想返回更少的參數? –

回答

1

那麼你可以減少一切只有一個參數,如果你願意到非規範化的東西和接受,例如CSV字符串:

"3, Jack, Jill, Jon, ..." 

然後在您的main()方法只是解析CSV:

public static void main(String[] args) { 
    String input = args[0]; 
    String[] params = input.split(",\\s+"); 

    int numPlayers = Integer.parseInt(params[0]); 
    String name1 = params[1]; 
    // and so on 
} 
1

如何在文件名和路徑只是存儲參數的文件名作爲參數

0

如果你想在程序開始時獲得這些信息,那麼如果你只是從一個csv文件中讀取它們,那麼這將是最好的,因爲它們很容易在java中訪問和操作。

如果您想將這些信息從一種方法傳遞給另一種方法,我會建議使用一個模型類,它存儲程序運行時所需的所有有價值的信息。這會提高性能,因爲每次將信息傳遞給新方法時都不需要爲變量分配新空間。

0

我喜歡將長參數列表作爲PHP中的關聯數組或作爲Javascript中的對象字面值傳遞。在我的函數裏面我有一個默認值的數組。然後我接受傳遞的params數組,並用傳入的覆蓋默認值。這樣,我不必記住任何順序,我可以省去不想傳遞的參數/我想要使用默認值的位置,並且數組鍵在調用函數的位置更具可讀性。

實施例(對不起,PHP):

function talk(array $params) 
{ 
    $defaults = [ 
     'foo' => 'Hi,', 
     'bar' => 'my ', 
     'baz' => 'name is ', 
     'foobar' => 'Benni' 
    ]; 

    $eff_params = array_merge($defaults, $params); 

    return $eff_params['foo'] . $eff_params['bar'] . $eff_params['baz'] . $eff_params['foobar']; 
} 

然後調用這樣的功能:

echo talk([ 
    'foobar' => 'Ted', 
    'foo' => 'Hello ' 
]); 

// Hello my name is Ted 

順便說一句,JQuery的使用這種技術有很多,例如因爲它的$ .ajax()函數