Программа инвентаризации ООП

Ошибка, которую я получаю, - это исключение индекса массива за пределами границ, но я не знаю, почему это происходит там, где оно есть.

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Inventory
{
    //Maximum amount of objects
    private static int MAX_ITEMS = 100;

    //Iteration from item to item
    private int d_nextItem = 0;

    //Array for the different objects
    private Stock[] d_list  = new Stock[MAX_ITEMS];

    public static void main(String[] args) throws FileNotFoundException
    {
        Inventory inventory = new Inventory();
        inventory.loadList(args[0]);
        //Costs printing out,rough draft, toString not made
        System.out.println("COSTS");
        inventory.getTotalCost();
        //Total Selling price printing out
        System.out.println("SELLINGP");
        inventory.getTotalSellingPrice();
        System.out.println("SAMOUNT");
    }

Конкретной ошибкой является исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: 0 в Inventory.main(Inventory.java:27), которое указывает на метод inventory.loadList в main. Ошибка возникает только при запуске программы, и я не знаю, почему это происходит.

Это метод loadList, и итерация не выглядит неправильной, так как же происходит исключение массива, когда массив хранит ссылку на информацию об объектах, а не на все разные строки, int и double.

  public void loadList(String fileName) throws FileNotFoundException
  {
    fileName = "stock1.txt";
    Scanner input = new Scanner(new File(fileName));
    String newLine = null;
    String name = null;
    String identifier = null;
    int quantity = 0;
    double cost = 0.0;
    double price = 0.0;
            while (input.hasNextLine() && d_nextItem < MAX_ITEMS)
            {
                     if(input.hasNext())
                    {
                            name = input.next();
                    }
                     if(input.hasNext())
                    {
                            identifier = input.next();
                    }
                     if(input.hasNextInt())
                    {
                            quantity = input.nextInt();
                    }
                     if(input.hasNextDouble())
                    {
                            cost = input.nextDouble();
                    }
                     if(input.hasNextDouble())
                    {
                            price = input.nextDouble();
                    }

                    d_list[d_nextItem]= new Stock(name,identifier,quantity,cost,price);
                   newLine = input.nextLine();
                    d_nextItem += 1;
            }
}

person DantesLightning    schedule 05.03.2014    source источник


Ответы (3)


Эта ошибка означает, что вы не передаете параметр программе.

args — это массив, содержащий параметры, переданные программе, тот факт, что индекс 0 выходит за пределы, означает, что параметры отсутствуют.

Как именно это сделать, будет зависеть от того, как вы запускаете программу.

person Bernhard Barker    schedule 05.03.2014

Массив args[] уникален тем, что при его использовании вы вызываете свою программу с дополнительной информацией, как правило, из командной строки.

Подходящим способом заполнения args[] будет следующий:

java Inventory classname.txt

Таким образом, Java преобразует classname.txt в args[0].

person Makoto    schedule 05.03.2014
comment
Вау......... вот что я делал неправильно, и я даже не осознавал этого, пока не прочитал ваш комментарий. И благодаря этому я смог двигаться дальше и исправить другие проблемы, которые у меня есть. Спасибо. - person DantesLightning; 05.03.2014

Из того, что я вижу, код, который вы вставили сюда, выглядит нормально. Так что проблема может быть в другом. Однако пара быстрых изменений может решить вашу проблему. используйте списки вместо массива для акций: List stocklist = new ArrayList(); список.добавить(...);

и сделайте d_nextItem локальной переменной и инициализируйте ее перед циклом while.

person user3381804    schedule 05.03.2014
comment
Когда эта программа была назначена нам в классе, мы не обращались к спискам массивов. Прямо сейчас мы просматриваем списки массивов, и я уверен, что наше следующее задание будет вариацией этого задания, но с использованием списков массивов. - person DantesLightning; 05.03.2014