我有这样的信息:
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)
并提取我想要/需要的信息。
抱歉信息过载。但我试图找到最适合我想做的解决方案。如果你能告诉我如何正确地拉开任何一种方式,我将永远感激你和你所有的后代。
答案 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();
现在您可以按照上述说明使用地图。