2017-03-26 43 views
-1

我想用Java初始化一組單獨的卡片。這是我到目前爲止的做法:以Java分離數據和函數

public ArrayList<Card> initDeck() { 
    ArrayList<Card> cardDeck = new ArrayList<Card>(24); 

    cardDeck.add(new Card("Emperor Augustus", 20.1, 40, 4.1, 300000, POWER_AND_INFLUENCE.VERY_HIGH)); 
    cardDeck.add(new Card("Jeff Bezos", 96, 22, 59.7, 268000, POWER_AND_INFLUENCE.HIGH)); 
    cardDeck.add(new Card("Bill Gates", 83.7, 41, 73, 112388, POWER_AND_INFLUENCE.MEDIUM)); 

    return cardDeck; 
} 

這是很多重複IMO。另外我想分開功能的數據。

是否可以將要添加到cardDeck中的元素(即new Card(...))導出到單獨的文件中?

在JavaScript中,你會讓它例如像這樣:

JSON-文件:

{ 
    data: [{ 
     name: "asdf", 
     economy: 123, 
     yearsInPower: 4 
    }, { 
     name: "bsdf", 
     economy: 3, 
     yearsInPower: 10 
    }, { 
     name: "csdf", 
     economy: 43, 
     yearsInPower: 5 
    }] 
} 

JS-文件:

const cards = require("./cards.json").data; 

function initDeck(cards) { 
    const cardDeck = []; 
    for (let i = 0; i < cards.length; i++) { 
     cardDeck.push(cards[i]); 
    } 
    return cardDeck; 
} 

let cardDeck = initDeck(cards); 

我看着其他實施Java中卡的初始化。但是所有的例子都假設卡片的邏輯順序,例如, 2,3,4 ...傑克,女王,國王,王牌。但在我的例子中,卡片不遵循任何邏輯順序。

+2

有Java可以讀取各種格式的名稱/數值數據的軟件包:JSON,YAML等。 – Pointy

回答

1

有幾種方法可以將數據與代碼分開(如從文件,數據庫等加載)。

如果你想從JSON文件加載數據,那麼你可以使用Jackson library來讀取JSON數據並將其轉換爲Java對象(反序列化),如下圖所示:

public List<Card> initDeck() throws Exception { 
    ObjectMapper mapper = new ObjectMapper(); 
    Card[] staff = mapper.readValue(new File("C:\\cards.json"), Card[].class); 
    List<Card> cardDeck = Arrays.asList(staff); 
    return cardDeck; 
} 

此外,作爲一個側面說明,請記住,編寫接口List<Card>return類型(如上所示)而不是像ArrayList這樣的具體類的最佳做法是,您可以在同一主題上查看here

+0

函數體中的'throws Exception'與'try-catch'塊相同嗎? – thadeuszlay

+0

要麼你需要從函數中'catch'Exception函數或'throw',以便調用者需要處理它 – developer

+0

爲每個你寫的方法添加一個'throw'是否有意義? – thadeuszlay