2013-12-22 25 views
2

好吧,所以我會先顯示我的代碼,然後我會解釋我需要幫助。從int到String的隨機元素?

Random isServerChance = new Random(); 
    Random isGood = new Random(); 
    Random isBad = new Random(); 

    // Some IDs which are considered "Good" 
    int isGoodTable[] = 
    { 1038, 1040, 1042, 1044 }; 
    // Some IDs which are considered "Bad" 
    int isBadTable[] = 
    { 6570, 6585, 952, 969 }; 
    // Based on this roll, will pick which cat is used. Good, or Bad. 
    int isServerRoll = isServerChance.nextInt(6); 
    // If it's > 3 it's going to be a "Good" item, if it's not, it's a bad 
    // item. 
    if (isServerRoll > 3) 
    { 

    int isGoodValue = isGood.nextInt(isGoodTable.length); 
    System.out.println("You've received a rare item! You got a: " + isGoodTable[isGoodValue]); 

    } else 
    { 
    int isBadValue = isBad.nextInt(isBadTable.length); 
    System.out.println("You've received a normal item. You've got a: " + isBadTable[isBadValue]); 

    } 

}

好了,所以這將打印:您收到了正常的項目。你有一個:969 ||你收到了一件稀有物品!你得到了:1042.

假設969的int值是一個鏟子。是否有可能使969等於上面的int表中的一個字符串 ?因此,如果我登上969,它會說:「你收到了一個普通的物品,你有一個:鏟子!」

我有點新,所以我不確定這是否可能,但我不想爲每個ID加載if語句。

感謝

+0

您可以使用散列(Set,Map),但這不適用於整數,所以使用Integer類來包裝它。 – Joqus

+4

使用一個'隨機' - 沒有理由有3個... –

回答

6

看來你只是想整數的字符串數組,而不是數組:

String[] isBadTable = { "Foo", "Bar", "Baz", "Spade" }; 

閱讀tutorial on arrays

+0

我不能從一個字符串中獲得隨機值。它必須是一個int值,那麼它需要解析爲一個字符串,或者有另一種方式?我現在擁有它的方式,它需要一個int來運行骰子滾動。還是有另一種方式? – user3128007

+0

我比我自己更喜歡這個答案,但我會離開我作爲一個潛在的有用的選擇。 @ user3128007,你正在爲數組選擇一個隨機索引,所以這應該仍然有效。 –

+2

代碼中的哪個位置是「從字符串中獲取隨機值」。字符串數組的長度仍然是一個整數。所以'isBad.nextInt(isBadTable.length)'仍然可以像以前一樣工作。 –

2

是的。使用Map<Integer, String>。你可以把你的項目在這樣

Map<Integer, String> itemMap = new HashMap<Integer, String>(); 
itemMap.put(969, "Spade"); 
// etc. 

然後你可以檢索像你這樣的值

String itemName = itemMap.get(969); // spade 

如果你這樣做,只是要小心,因爲HashMap沒有任何缺省值,所以如果您嘗試使用的密鑰不在Map中,則會返回null

2

您可以使用enum來解決此問題。例如,你可以做

public enum CardSuit { 
    SPADE(969, "Spades"), 
    HEART(952, "Hearts"), 
    DIAMOND(6585, "Diamonds"), 
    CLUB(6570, "Clubs"); 

    private final int value; 
    private final String name; 

    private CardSuit(int value, String name){ 
     this.value = value; 
     this.name = name; 
    } 

    public int getValue(){ 
     return value; 
    } 

    public String toString(){ 
     return name; 
    } 

} 

現在,您可以通過使用

CardSuit[] suits = CardSuit.class.getEnumConstants(); 

使CardSuit數組,可以通過調用CardSuit.SPADE.getValue黑桃到969映射()。使用Map<Integer, CardSuit>在另一個方向進行查找。

查看The Java Tutorials on Enums查看全面的教程。

0

假設你需要ID和字符串(而不是一個String表,只是使用索引作爲ID),它看起來像你想要某種HashMap。

import java.util.HashMap; 


HashMap<Integer, String[]> IDs = new HashMap<>(); 
IDs.put(969, new String[]{"Spade", "Shovel"}); // Setting up your HashMap 

// Recalling later 
int randomID = 969; 
String[] items = IDs.get(randomID); // items will be "Spade", "Shovel", will be null if the ID is not in the HashMap. 

HashMap的文檔:http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html

0

你有基本的想法了。我們不會生成隨機字符串,只會隨機編號。聲明多個Random對象沒有意義。使用一個隨機數發生器來創建你需要的所有數字。作爲初學者,我不會推薦地圖,然後在數組中創建一個數字(item#)之間的對應關係。你可以把通信放到一個文本文件中。如果你有很多項目,這是要走的路。通過文本文件搜索是一個很好的練習。