У вас должен быть массив Product как члена класса InventoryPart2 ИЛИ переданный в метод sortProductArray. Вам придется изменить этот метод, чтобы он возвращал ссылку на отсортированный массив, если вы выберете последний.
Ваш массив Product находится в методе static main и не является частью объекта, поэтому возникла проблема. Я бы порекомендовал вам сделать что-то вроде этого:
public class Inventory
{
private static final int DEFAULT_INVENTORY_SIZE = 5;
private Product [] products;
private int numProducts;
public Inventory()
{
this(DEFAULT_INVENTORY_SIZE);
}
public Inventory(int size)
{
products = new Product[size];
numProducts = 0;
}
public void addProduct(Product p)
{
products[numProducts++] = p;
}
public void sort()
{
// sort the array here
}
public String toString()
{
StringBuilder builder = new StringBuilder(1024);
// Create a string representation of you inventory here
return builder.toString();
}
}
Объектно-ориентированное программирование - это инкапсуляция и сокрытие информации. Напишите класс таким образом, чтобы клиенты не знали и не заботились о том, используете ли вы массив или что-то еще для хранения продуктов. Вы абстрагируете идею инвентаризации здесь.
UPDATE:
Это ваш код, только лучше и работает:
import java.util.Scanner;
import java.util.Arrays;
public class InventoryPart2
{
public static void main(String[] args)
{
final int ARRAY_LENGTH = 5;
final int version = 2;
int counter = 0;
Product productArray[] = new Product[ARRAY_LENGTH];
System.out.printf("\n%s%d\n",
"Welcome to the Productentory Program v.", version);
productArray[0] = new Product("EThe Invisible Man", 0, 8.50);
productArray[1] = new Product("DThe Matrix", 1, 17.99);
productArray[2] = new Product("CSe7en", 7, 12.99);
productArray[3] = new Product("BOceans Eleven", 11, 9.99);
productArray[4] = new Product("AHitch Hikers Guide to the Galaxy", 42, 18.69);
productArray = sortProductArray(productArray);
// Print sorted array
for (Product product : productArray)
{
if (counter == 0)
{
System.out.printf("\n%s\n", "Sorted Inventory of DVD movies");
}
System.out.printf("\n\n%s%d\n%s%s\n%s%d\n%s%.2f\n%s%.2f\n",
"Item Number: ", counter,
"DVD Title: ", product.getProductTitle(),
"Copies in stock: ", product.getUnitsInStock(),
"Price each disk: $", product.getUnitPrice(),
"Value of disks: $", product.calcInventoryValue());
counter++;
}
System.out.printf("\n%s%,.2f\n\n\n",
"Collection Value: $", calcTotalInventoryValue(productArray));
}
private static double calcTotalInventoryValue(Product[] productArray)
{
double inventoryValue = 0;
for (Product product : productArray)
{
inventoryValue += product.calcInventoryValue();
}
return inventoryValue;
}
private static Product[] sortProductArray(Product[] productArray)
{
Arrays.sort(productArray, new ProductComparator());
return productArray;
}
}
Я удалил те комментарии, которые вы добавляете везде. Они просто беспорядок; Я бы порекомендовал вам больше не делать этого. Лучше сделать ваш код более читабельным и самодокументируемым, используя лучшие имена переменных и методов.
Это все еще не тот способ, которым я бы порекомендовал вам написать, но это работает. Вы с большей вероятностью поймете, почему это работает, если я не буду слишком сильно его изменять.
ОБНОВЛЕНИЕ 2:
На случай, если вам интересно, вот как я мог бы написать это:
import java.util.Scanner;
import java.util.Arrays;
import java.text.NumberFormat;
public class Inventory
{
private static final int DEFAULT_LENGTH = 5;
private static final int VERSION = 2;
private Product[] products;
private int numProducts;
public static void main(String[] args)
{
Inventory inventory = new Inventory(5);
inventory.addProduct(new Product("EThe Invisible Man", 0, 8.50));
inventory.addProduct(new Product("DThe Matrix", 1, 17.99));
inventory.addProduct(new Product("CSe7en", 7, 12.99));
inventory.addProduct(new Product("BOceans Eleven", 11, 9.99));
inventory.addProduct(new Product("AHitch Hikers Guide to the Galaxy", 42, 18.69));
System.out.println(inventory);
System.out.println("total value: " + NumberFormat.getCurrencyInstance().format(inventory.getTotalValue()));
}
public Inventory()
{
this(DEFAULT_LENGTH);
}
public Inventory(int size)
{
products = new Product[size];
this.numProducts = 0;
}
public void addProduct(Product p)
{
products[numProducts++] = p;
}
public double getTotalValue()
{
double inventoryValue = 0.0;
for (Product product : products)
{
inventoryValue += product.calcInventoryValue();
}
return inventoryValue;
}
public String toString()
{
StringBuilder builder = new StringBuilder(1024);
String newline = System.getProperty("line.separator");
if (products.length > 0)
{
Arrays.sort(products, new ProductComparator());
for (Product product : products)
{
builder.append(product).append(newline);
}
}
return builder.toString();
}
}