我有这样的信息:
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来存储这样的东西是“过时的”,并且提供了一种不同的方式来设置我的代码。我使用ArrayList<>的原因是因为我希望能够根据需要生成新的参赛者,而不是指定一个大小的数组。如果我可以使用一个简单的数组,这在一周前就已经完成了。现在我已经摆弄了一个星期了,我还是不明白它是怎么工作的。
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的耐力值。我一直在遵循这里的其他人给我的确切方向来编写大部分代码。但在这个时候,我只是重写了它,以便每个统计数据(姓名、耐力、英特尔、速度等)只是作为一个单独的ArrayList<>记录。但是我不知道如何制作包含原始ArrayLists ie的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)并获取我想要/需要的信息。
很抱歉这里的信息过载了。但我正在努力为我想做的事情找到可能的最佳解决方案。如果你能告诉我如何正确地摆脱任何一种方式,我将永远感谢你,你和你所有的后代。
发布于 2014-09-16 17:34:09
首先,您应该将您的类测试重构为类Racer,这是一个有意义的名称,并遵循以大写字母开头的约定。此外,您应该向构造器添加耐力、英特尔、心脏和速度:
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是一个由键值对组成的集合。对于key,您可以使用字符串(Racer的名称),作为值,您可以获取类Racer的一个实例:
HashMap<String, Racer>() racerMap = new HashMap<>();
racerMap.put("Fred2", fred2);你可以在一个for循环中为你所有的参赛者做这件事。现在,您可以通过调用getMethod并将name作为参数放入其中,从HashMap中获取racer对象。这将返回一个Racer类的对象,您可以在此对象上调用getter方法:
racerMap.get("Fred2").getSpeed();或
racerMap.get("Fred2").getIntel();编辑:我刚刚看到了你的generate方法。此方法应返回参赛者的HashMap。在main方法中,创建一个新的HashMap:
HashMap<String, Racer> racerMap = generate();现在,您可以使用上面描述的地图。
https://stackoverflow.com/questions/25865119
复制相似问题