2012-03-11 5 views
1

I несколько наборов массивов. Первый массив содержит идентификатор элемента (в приведенном ниже примере это будет идентификатор конкретного животного). Второй массив содержит 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?

+5

Я не совсем понимаю ваш вопрос. Но на языке OO, таком как Java, вместо нескольких массивов, каждый из которых содержит другое поле животного (ID, количество и т. Д.), Вы должны иметь один массив или коллекцию, содержащую экземпляры класса Animal. И животное должно иметь идентификатор свойства, количество свойств и т. Д. –

+0

Вам действительно нужно забрать базовую книгу Java и прочитать ее, прежде чем продолжить этот проект. – Perception

+0

Насколько я понимаю, ваша проблема требует некоторого понимания OOPS и использования Java Collection. Plz взгляните на них .. u может создать ваше решение намного лучше, чем делать сейчас. – Sabya

ответ

2

Java передает ссылки по значению, поэтому изменения объектов, на которые они ссылаются, будут видны вне метода. Если у вас уже есть ваши массивы определены, вы можете просто написать:

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

Это, конечно, не будет работать, если вы хотите создать новые массивы внутри метода - в этом случае вы должны создать некоторый объект-оболочку.

Также slighty оффтоп: для вашего конкретного случая было бы лучше использовать либо Map (отображение идентификатора животного в количестве) или массив или список

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); 
+0

Я понимаю, что это был бы лучший подход, но я должен использовать формат, который присутствует в скрипте, над которым я работаю.Я пытаюсь реорганизовать его на данный момент - следовательно, используя загрузку данных MySQL, в отличие от ранее использованной обработки файлов. Преобразование их в объекты - это то, что я намереваюсь сделать позже. – jSherz

Смежные вопросы