如何从"指定的方法中提取值。"

时间:2014-09-16 09:25:20

标签: java arrays arraylist

我有这样的信息:

xxx      0      1      2      ...
Name     Fred0  Fred1  Fred2
Stamina  2      6      7
Intel    5      4      1
Heart    4      8      2
Speed    5      3      6

所以,之前我被告知创建一个2D ArrayList来存储这样的东西是&#34;古老的&#34;并提供了一种不同的方式来设置我的代码。我使用ArrayList<>的原因是因为我希望能够根据需要生成新的racers,而不是将数组指定为一个大小。如果我可以使用一个简单的数组,这将在一周前完成。现在我已经搞了一个星期,我仍然不知道它是如何工作的。

public class test {
    public String name;
    private int stamina;
    private int heart;
    private int intel;
    private int speed;
    public ArrayList<String> racers = new ArrayList<String>();

    private void racerInfo(String name) {
        this.name = name;
        this.stamina = (int) Math.floor(Math.random()*10);
        this.heart = (int) Math.floor(Math.random()*10);
        this.intel = (int) Math.floor(Math.random()*10);
        this.speed = (int) Math.floor(Math.random()*10);
    }

    public void generate() {
        for ( int i=0; i<=10; i++) {
            String name = "Fred" + i;
            System.out.println(name);
            racerInfo(name);
            racers.add(name);
        }
    }

    public int getStamina() {
        return this.stamina;
    }
    public int getHeart() {
        return this.heart;
    }
    public int getIntel() {
        return this.intel;
    }
    public int getSpeed() {
        return this.speed;
    }
}

public class main {
    public static test test = new test();

    public static void main(String[] args) {
        test.generate();
        //Put stuff here to pull stamina of Fred2 for example.
    }
}

现在,在主课堂上。我如何做一些应该相对简单的事情,比如拉动Fred2的Stamina值。 我一直在按照其他人给出的确切指示来编写大部分代码。但是在这个时候,我已经到了重新编写这一切的地步,以便每个统计数据(名称,耐力,英特尔,速度等)都只是作为单独的ArrayList<>记录。但我无法弄清楚如何制作包含原始ArrayLists的2D ArrayList,即

ArrayList<String> name = new ArrayList<String>();
ArrayList<Integer> stamina = new ArrayList<Integer>();
ArrayList<ArrayList<Object>> arrayOfArray = new ArrayList<ArrayList<Object>>();

是的,我知道arrayOfArray可能做错了,但是,再一次,我只是被告知它是古老的,没有人会告诉我如何才能做到这一点,所以我可以做到走。 arrayOfArray.get(2,1)并提取我想要/需要的信息。

抱歉信息过载。但我试图找到最适合我想做的解决方案。如果你能告诉我如何正确地拉开任何一种方式,我将永远感激你和你所有的后代。

1 个答案:

答案 0 :(得分:1)

首先,您应该将类​​测试重构为类Racer,这是一个有意义的名称,并遵循约定以大写字母开始类名。此外,您应该将Stamina,Intel,Heart和Speed添加到构造函数中:

public Racer(String name, int stamina, int intel, int heart, int speed) {
    this.name = name;
    this.stamina = stamina;
    this.intel = intel;
    this.heart = heart;
    this.speed = speed;
}

现在您可以按照以下方式创建您的赛车:

Racer fred2 = new Racer("Fred2", 7, 1, 2, 6);

您可以将值存储在HashMap中。 HashMap是一个由键值对组成的集合。对于键,你可以使用一个字符串(赛车的名称)和值作为你的类Racer实例的值:

HashMap<String, Racer>() racerMap = new HashMap<>();
racerMap.put("Fred2", fred2);

这可以为所有赛车手进行for循环。现在,您可以通过调用getMethod并将名称作为参数放入HashMap中来获取racer对象。这将返回Racer类的对象,您可以在此对象上调用getter方法:

racerMap.get("Fred2").getSpeed();

racerMap.get("Fred2").getIntel();

编辑:我刚看到你的生成方法。此方法应返回赛车手的HashMap。在main方法中,您将创建一个新的HashMap:

HashMap<String, Racer> racerMap = generate();

现在您可以按照上述说明使用地图。