将变量分配给数组

时间:2012-03-11 18:56:49

标签: java

我有几组数组。第一个数组包含项目的ID(在下面的示例中,它将是特定动物的ID)。第二个数组包含该项的QTY。

public int[] animals;
public int[] animalsQTY

这些用法如下:

animals[0] = 123; // ID for pig, for e.g.
animalsQTY[0] = 4; // 4 pigs

我从MySQL数据库中将值加载到这些数组中并拥有多组数据,因此我不想一遍又一遍地编写相同的加载代码。

问题是,如果我没有将数据库中的值加载到其中一个字段中,则它必须是默认值。在允许通过引用传递变量的语言中,我将要更新的变量发送到加载方法:

Sub LoadFromMySQL(ByVal TableName As String, ByRef UpdateA() As Integer, ByRef UpdateB() As Integer)

然后,只有在MySQL数据库中找到相关记录时才更改提供的数组中的项目。

如果我只有一对数组,我会做类似的事情:

results = getMySQLresults();
foreach results as result
    animals[result['slot']] = result['id'];
    animalsQTY[result['slot']] = result['qty'];
end foreach

但是我有很多要更新的数组。如何将上述伪代码转换为Java函数/方法?

2 个答案:

答案 0 :(得分:2)

Java按值传递引用,因此对它们引用的对象的更改将在方法外部可见。如果已经定义了数组,则只需编写:

    void loadFromMySql(String tableName, int[] arrayA, int[] arrayB) {
        ... code to fill the arrays ...
    }

如果你想在方法中创建新的数组,那当然是行不通的 - 在这种情况下你必须创建一些包装器对象。

也是轻微的offtopic:对于你的特殊情况,最好是使用Map(将动物的id映射到数量)或数组或列表

答案 1 :(得分:1)

面向对象的一些基础知识:

首先为您的动物创建一个类,其中包含ID和数量字段。

public class MyCustomAnimal{
// field variables
    private int Id;
    private int Qty;

// getter and setter
    public int getId() {
        return this.Id;
    }
    public void setId(int id) {
        this.Id = id;
    }
    public int getQty() {
        return this.Qty;
    }
    public void setQty(int qty) {
        this.Qty = qty;
    }

// constructor
    public MyCustomAnimal(int id, int qty){
        this.Id = id;
        this.Qty = qty;
    }
}

然后从数据库查询中创建MyCustomAnimal类型的对象。

MyCustomAnimal animal = new MyCustomAnimal(123, 4);

甚至可以创建动物对象的数组。

MyCustomAnimal[] animal = new MyCustomAnimal[3];
animal[0] = new MyCustomAnimal(615, 7);
animal[1] = new MyCustomAnimal(654, 5);
animal[2] = new MyCustomAnimal(687, 9);