我有几组数组。第一个数组包含项目的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函数/方法?
答案 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);