从int到String的随机元素?

时间:2013-12-22 22:31:56

标签: java arrays

好的,我将首先展示我的代码,然后我将解释我需要帮助的内容。

  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值是一个Spade。我是否有可能使969等于一个字符串数组 从上面的一个int表?

所以,如果我登陆969,它会说:“你收到了正常的物品。你有一个:锹!”

我有点新,所以我不确定这是否可行,但我不想为每个ID加载if语句。

由于

5 个答案:

答案 0 :(得分:6)

看起来你只想要字符串数组而不是整数数组:

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

阅读tutorial on arrays

答案 1 :(得分: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中,那么您将获得{ {1}}回来。

答案 2 :(得分: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数组
CardSuit[] suits = CardSuit.class.getEnumConstants();

您可以通过调用CardSuit.SPADE.getValue()将黑桃映射到969。使用Map<Integer, CardSuit>在另一个方向进行查找。

有关全面的教程,请参阅The Java Tutorials on Enums

答案 3 :(得分: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

答案 4 :(得分:0)

你有基本的想法。我们不生成随机字符串,只生成随机数字。声明多个Random对象没有意义。使用一个Random生成器创建所需的所有数字。

作为初学者,我不建议使用map来创建数组中的数字(项目#)之间的对应关系。您可以将通信放入文本文件中。如果你有很多物品,这就是你要走的路。搜索文本文件是一个很好的练习。