使用字符串写入数组

时间:2014-02-25 17:40:22

标签: java arrays string

尝试整理代码,最初我正在使用这种写入数组的方法,当我不得不重复20次时这是非常长的

        if (ant.getAntNumber() == 3)
        {
            numbers3.add(ant.getCol());
            numbers3y.add(ant.getRow());
        }

        if (ant.getAntNumber() == 4)
        {
            numbers4.add(ant.getCol());
            numbers4y.add(ant.getRow());
        }

我尝试使用for循环来完成它,但是我无法弄清楚如何使用字符串值添加到数组中,因为它认为它是一个字符串而不是尝试使用数组

for (int j = 0; j<maxAnts; j++)
        {
            String str = "numbers" + j;
            String str2 = "numbers" + j + "y";
            //this part doesnt work
            str.add(ant.getCol());

        }

任何建议都会有所帮助

3 个答案:

答案 0 :(得分:1)

这个怎么样?

Ant[] aAnt = new Ant[20];

//Fill the ant-array

int[] aColumns = new int[aAnt.length];
int[] aRows = new int[aAnt.length];

for(int i = 0; i < aAnt.length; i++)  {
   aColumns[i] = aAnt[i].getCol();
   aRows[i] = aAnt[i].getRow();
}

或列表:

List<Integer> columnList = new List<Integer>(aAnt.length);
List<Integer> rowList = new List<Integer>(aAnt.length);

for(Ant ant : aAnt)  {
   columnList.add(ant.getCol());
   rowList.add(ant.getRow());
}

或使用col / row对象:

class Coordinate  {
   public final int yCol;
   public final int xRow;
   public Coordinate(int y_col, int x_row)  {
      yCol = y_col;
      xRow = x_row;
   }
}

//use it with

List<Coordinate> coordinateList = new List<Coordinate>(aAnt.length);
for(Ant ant : aAnt)  {
   coordinateList.add(ant.getCol(), ant.getRow());
}

答案 1 :(得分:1)

在Java中,您不能使用String对象的值来引用实际的变量名称。 Java会认为您正在尝试在add对象上调用String,该对象不存在并且会为您提供您所看到的编译器错误。

为避免重复,您需要将List添加到两个可以索引的主列表中。

在你的问题中,你提到了数组,但你打电话给add,所以我假设你真的指的是某种List

List<List<Integer>> numbers = new ArrayList<List<Integer>>(20);
List<List<Integer>> numbersy = new ArrayList<List<Integer>>(20);
// Add 20 ArrayList<Integer>s to each of the above lists in a loop here.

然后你可以检查ant.getAntNumber()并将其用作主列表的索引。

int antNumber = ant.getAntNumber();
// Make sure it's within range here.

numbers.get(antNumber).add(ant.getCol());
numbersy.get(antNumber).add(ant.getRow());

答案 2 :(得分:1)

代码的直接端口是使用两个存储X和Y坐标的Map<Integer, Integer>。从您的代码看,蚂蚁数字似乎是唯一的,即我们只需要为每个蚂蚁数存储一个X和Y值。如果您需要为每个蚂蚁编号存储多个值,请使用List<Integer>作为Map的值类型。

Map<Integer, Integer> numbersX = new HashMap<Integer, Integer>();
Map<Integer, Integer> numbersY = new HashMap<Integer, Integer>();

for(Ant ant : ants) {
    int number = ant.getAntNumber();        
    numbersX.put(number, ant.getCol());
    numbersY.put(number, ant.getRow());
}