2015-03-21 3 views
0

Я довольно новичок в кодировании. Это мой первый класс, и это введение в Java. Я застрял на одной части задания - не знаю, куда идти.Получение объекта моего продукта в массив - Java

У меня есть программа инвентаризации, которая имеет класс продукта и класс запаса. Класс запаса должен иметь возможность использовать объект продукта в массиве в методах, чтобы 1) рассказать, есть ли товар в запасе w. его ску. 2) возвращаемое количество с sku 3) добавьте или удалите продукт со склада.

Это звучит достаточно просто, но я не понимаю его. Я искал в Интернете и читал мою книгу в течение нескольких недель безрезультатно, поэтому я думал, что попробую.

класс Мой продукт содержит обычные методы получения/установки для QTY, СКУ, цена, название

Это мой Stock класс:

public class Stock 
{ 
private static final int MAX = 100; 
int currentNoOfProd = 0; 
Product[] productsArray = new Product[MAX]; 

//I need an empty stock array constructor 

/* public Stock (int[] stockArray) 
{ 
this.productsArray = stockArray; 
}*/ 


//method to tell if Product is in Stock with SKU 

public void inStock() 
{ 
    for(int i = 0; i< MAX; i++) 
    { 
     System.out.println("testing stock inventory\n" + productsArray[i].getSKU()); 

     if (productsArray[i].getQty() > 0) 
     { 
      System.out.println("In Stock"); 
     } 

    } 
} 

//return the quantity of a Product given its SKU 
public void qtyInStock() 
{ 
    for(int i=0; i< MAX; i++) 
    { 
     System.out.println("in qtyInStock loop\n" + productsArray[i].getSKU()); 
     System.out.println("getting quantity qtyInStock" + productsArray[i].getQty()); 

    } 

} 


//add or remove a Product from Stock 

} Мой запас класс только у меня тестирование идеи попробуйте и сделайте/что-то /, но в этот момент я полностью потерян. Это может быть неопределенным, но я не знаю, насколько более конкретным я могу получить.

Я жестко кодирую sku, имя, цену и quatity в моей программе драйверов, если это помогает, когда я запускаю объект продукта.

Предложения были бы замечательными или подсказками, что-нибудь действительно помогло бы мне двигаться дальше и понять это и узнать. Спасибо.

+0

Прежде всего, ваши методы должны получить некоторые вменения. Например, ваш комментарий говорит «return ... учитывая его sku», но вы не «даете» такое значение. –

+0

Используется ли сборка (динамические структуры данных) в задании или вам нужно использовать массивы? –

+0

@MickMnemonic, к сожалению, мы должны использовать массивы – bichorom

ответ

0

Некоторые указатели, которые мы надеемся вести Вас вперед:

1. Переменные экземпляра в классе Stock

По умолчанию вы всегда должны использовать область «наименее видимого», то есть private, в ваших переменных экземпляра. Это означает, что Product[] productsArray следует заменить на private Product[] productsArray. Переменные в закрытой области могут быть доступны только содержащемуся классу, что хорошо, когда класс является частью более крупного приложения, и вы отлаживаете вещи.

2. Способ говоря, является ли продукт на складе или нет

Ваш inStock() метод в настоящее время ни с помощью (единицы складского учета) «Артикул» для ввода и не возвращая ничего обратно к абоненту. Было бы лучше сменить подпись метода на

public boolean inStock(String sku) 

вместо этого. Итерации над productsArray выглядит нормально, даже если вы можете сделать его еще более кратким, используя for-each конструкцию, которая была доступна из Java 5 и далее (массив знает свой размер после того, как был создан):

for (Product p : productsArray) { 
    // you can use p.getQty() and p.getSKU() within the loop 
    ... 
} 

Пожалуйста обратите внимание, что поскольку ваш массив может/будет содержать null элементов, вы должны проверить на p != null перед вызовом любых методов на p.В основном вам просто нужно вернуть true из цикла, когда вы найдете совпадение с положительным количеством и данным «SKU». В противном случае верните false в конце метода, потому что совпадений не найдено.

3. Возвращение количество продукта

Метод подпись должна быть изменено на

public int qtyInStock(String sku) 

Если мы предположим, что productsArray имеет место только один Product для данного «SKU», то вы можете просто перебирайте массив и возвращайте количество продукта, если оно найдено.

4. Добавить или удалить продукт со склада.

Возможно, вы захотите разбить это требование на два разных метода: один для добавления и один для удаления материала из вашего запаса. Например:

public void addProduct(Product p) 

и

public void removeProduct(Product p) 

Это более сложные методы реализации, поскольку они требуют манипуляции, лежащей в основе productsArray. Кроме того, в реальных приложениях метод, возможно, бросит Exception, если произойдет что-то неожиданное (запас из космоса, продукт не находится на складе и т. Д.).

Если мы предположим, что ваш MAX размер массива достаточно велик, и что вы только хранить одну Product за «SKU» в массиве, то в основном вам нужно:

При добавлении продукта: Итерация по массиву и попытайтесь найти продукт с «SKU», соответствующий «SKU» входного продукта. Если совпадение найдено, увеличьте количество в зависимости от количества входного продукта; иначе сохраните продукт в первом доступном слоте (имеющем productsArray[i] == null) в массиве.

При удалении изделия: если совпадение найдено в массиве, просто установите его на null, используя productsArray[i] = null.

Обратите внимание, что в этих методах модификации массива более практично выполнять итерацию с использованием цикла for, который отслеживает индекс (for (int i = 0; i < MAX; i++)), который вы уже использовали в вашем примере кода.

0

Вы должны использовать коллекцию, например. г. ArrayList<Product> вместо Product[]. Ваш запас не был бы фиксированный размер, и вы получите некоторый полезный API, как, например, list.add(product),list.contains(product) и т.д.

+0

Можно ли это сделать без списка? в то время как это, вероятно, будет иметь больше смысла, я не верю, что мне разрешено использовать его. – bichorom

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