Ошибки, отображающие наименьшее или наибольшее количество инвентарного массива (Java) - PullRequest
1 голос
/ 08 апреля 2020

Хорошо, поэтому я сделал программу для торгового автомата. Когда пользователь покупает предмет, равный или превышающий его стоимость, инвентарь предмета истощается на 1. Фургон предмета можно купить до трех раз, пока запас не закончится. В этот момент JButton исчезнет, ​​и на предмет нельзя будет нажать или купить. Чтобы добавить сложности, я добавил кнопку «Проверить общий инвентарь». То, что должно произойти при нажатии, - это программа, распечатывающая наименьшее и наибольшее количество товара.

Например:

Inventory of Liton: 0
Inventory of Fanta: 1
Inventory of Pepsi: 2 
Inventory of Gum: 3
Inventory of Seeds:3
Inventory of Chocolate: 3

Для этого используется l oop, который я использовал: private void CheckInventoryActionPerformed (java .awt.event.ActionEvent evt) {

    int inventory[]={stock, stock2, stock3, stock4, stock5, stock6};     

    int temp;
    boolean fixed= false;

    while(fixed==false){
        fixed=true;

         for (int i=0; i<inventory.length-1; i++){
            if(inventory[i]> inventory[i+1]){                    
                temp= inventory[i+1];                    
                inventory [i+1]= inventory[i];                   
                inventory[i]= temp;
                fixed= false;

            }
        }
    }

    for (int i=0; i<inventory.length; i++){
            System.out.println("The inventory of Lipton is:" + inventory[i]);
           System.out.println("The inventory of Fanta is:" + inventory[i+2]);
                System.out.println("The inventory of Pepsi is:" +inventory[i+3]);
                System.out.println("The inventory of Gum is:" +inventory[i+4]);
                System.out.println("The inventory of Seeds is:" +inventory[i+5]);
                System.out.println("The inventory of Choco is:" +inventory[i+6]);   
    }
}                                              

Хотя есть несколько проблем ... Мне было интересно, если кто-нибудь может помочь мне, потому что я не знаю, в чем проблема, несмотря на многочисленные попытки ее исправить. Когда я нажимаю только на Fanta и покупаю один (так что инвентарь Fanta должен быть равен 2), инвентарь для Lipton уменьшается, когда я не нажимаю на него. «Инвентарь шоколада: и количество инвентаря» также не печатается. Есть также много других ошибок, таких как

    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 6
    at finalvending.finalvendingclass.CheckInventoryActionPerformed(finalvendingclass.java:623)
at finalvending.finalvendingclass.access$600(finalvendingclass.java:18)
at finalvending.finalvendingclass$7.actionPerformed(finalvendingclass.java:129)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)

et c.

Я не понимаю, что говорят мне эти ошибки. Но я сделал несколько вещей, чтобы попытаться исправить это. Во-первых, у меня запущена функция отладки, в которой ничего не найдено. Я дважды проверил каждый int склад, int stock2, int stock3, et c. правильно определено для каждого раздела выше l oop, et c.

Вот код, который я использую для каждого раздела того, что вы можете купить в торговом автомате. По сути, каждый элемент копируется и вставляется, за исключением того, что я изменяю цену и вызываемое изображение: я также могу вставить больше кода, если это потребуется. Липтон и Фанта:

int stock=3;
private void liptonActionPerformed(java.awt.event.ActionEvent evt) {                                       
final JPanel panel = new JPanel();

DecimalFormat dollarFormat = new DecimalFormat(" $#,##0.00");

String inputstring;
double input, change;

inputstring= JOptionPane.showInputDialog("Please enter your payment: $");
input= Double.parseDouble(inputstring);
change= input-1;   

    if (input<1)
    {
   JOptionPane.showMessageDialog(panel, " You do not have enough money to purchase this item", "INSUFFICIENT FUNDS",
        JOptionPane.WARNING_MESSAGE); 
    }

    else if (input>1)
    {
    JOptionPane.showInputDialog("You have purchased a Lipton Tea. Here is your change:" +(dollarFormat.format(change)));
    stock--;


    ImageIcon liptonIcon= new ImageIcon("usethislipton.png");

    Image liptonImage= liptonIcon.getImage();
    Image modifiedliptonImage= liptonImage.getScaledInstance(100,150, java.awt.Image.SCALE_SMOOTH);
    liptonIcon= new ImageIcon (modifiedliptonImage);
    JOptionPane.showMessageDialog(panel, "Lipton Tea", "Here is your drink! Enjoy!", JOptionPane.INFORMATION_MESSAGE, liptonIcon);   

    }

    else if (input==1)
    {
    JOptionPane.showInputDialog("You have purchased a Lipton Tea.");
    stock--;

    ImageIcon liptonIcon= new ImageIcon("usethislipton.png");

    Image liptonImage= liptonIcon.getImage();
    Image modifiedliptonImage= liptonImage.getScaledInstance(100,150, java.awt.Image.SCALE_SMOOTH);
    liptonIcon= new ImageIcon (modifiedliptonImage);
    JOptionPane.showMessageDialog(panel, "Lipton Tea", "Here is your drink! Enjoy", JOptionPane.INFORMATION_MESSAGE, liptonIcon);  
    }

        if (stock==1)
        {    
           JOptionPane.showMessageDialog(panel, " There is only 1 Lipton Tea remaining! Restock recommnended", "WARNING",
                JOptionPane.WARNING_MESSAGE);       
        } 
        else if (stock==0)
        {
           JOptionPane.showMessageDialog(panel, "Sorry, Lipton Tea is out of stock", "",
           JOptionPane.WARNING_MESSAGE);       

           lipton.setVisible(false);
        }

}                                      
int stock2=3;
private void fantaActionPerformed(java.awt.event.ActionEvent evt) {                                      
     final JPanel panel = new JPanel();
     DecimalFormat dollarFormat = new DecimalFormat(" $#,##0.00");

String inputstring;

double input, change;

inputstring= JOptionPane.showInputDialog("Please enter your payment: $");
input= Double.parseDouble(inputstring);
change= (input-1.25);

if (input<1.25)
{
    JOptionPane.showMessageDialog(panel, " You do not have enough money to purchase this item", "INSUFFICIENT FUNDS",
    JOptionPane.WARNING_MESSAGE);
}

else if (input>1.25)
{
    JOptionPane.showInputDialog("You have purchased a Fanta. Here is your change" +(dollarFormat.format(change)));
       stock2--;

    ImageIcon fantaIcon= new ImageIcon("finalfanta2.png");

 Image fantaImage= fantaIcon.getImage();
 Image modifiedfantaImage= fantaImage.getScaledInstance(100,150, java.awt.Image.SCALE_SMOOTH);
 fantaIcon= new ImageIcon (modifiedfantaImage);
 JOptionPane.showMessageDialog(panel, "Fanta", "Here is your drink! Enjoy", JOptionPane.INFORMATION_MESSAGE, fantaIcon);  

}
else if (input==1.25)
{
    JOptionPane.showInputDialog("You have purchased a Fanta.");
       stock2--;

   ImageIcon fantaIcon= new ImageIcon("finalfanta2.png");

 Image fantaImage= fantaIcon.getImage();
 Image modifiedfantaImage= fantaImage.getScaledInstance(100,150, java.awt.Image.SCALE_SMOOTH);
 fantaIcon= new ImageIcon (modifiedfantaImage);
 JOptionPane.showMessageDialog(panel, "Fanta", "Here is your drink! Enjoy", JOptionPane.INFORMATION_MESSAGE, fantaIcon);  

 }

    if (stock2==1)
        {    
           JOptionPane.showMessageDialog(panel, " There is only 1 Fanta remaining! Restock recommnended", "WARNING",
           JOptionPane.WARNING_MESSAGE);             
        }
       else if (stock2==0)
        {
           JOptionPane.showMessageDialog(panel, "Sorry, Fanta is out of stock", "",
           JOptionPane.WARNING_MESSAGE);       

           fanta.setVisible(false);
        }


}                                     

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Хорошо, посмотрите на этот фрагмент кода здесь:

for (int i=0; i<inventory.length; i++){
            System.out.println("The inventory of Lipton is:" + inventory[i]);
           System.out.println("The inventory of Fanta is:" + inventory[i+2]);
                System.out.println("The inventory of Pepsi is:" +inventory[i+3]);
                System.out.println("The inventory of Gum is:" +inventory[i+4]);
                System.out.println("The inventory of Seeds is:" +inventory[i+5]);
                System.out.println("The inventory of Choco is:" +inventory[i+6]);   
    }

Переменная 'i' будет go от 0 до инвентарь. Длина-1 включительно. Например, возьмем самый крайний случай, когда

i = inventory.length()-1

Теперь давайте посмотрим, что будет делать ваша программа.

Сначала она начинается с печати

The inventory of Liptop is: inventory[inventory.length-1]

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

i+2 будет inventory.length+1! Очевидно, это вне индекса массива инвентаря.

0 голосов
/ 08 апреля 2020

Вы зацикливаете весь массив и получаете следующую позицию для сравнения, когда вы находитесь в конце массива и go на следующую позицию, вы получаете java .lang.ArrayIndexOutOfBoundsException: 6

for (int i=0; i<inventory.length-1; i++){
            if(inventory[i]> inventory[i+1]){ //here                   
                temp= inventory[i+1];                    
                inventory [i+1]= inventory[i];                   
                inventory[i]= temp;
                fixed= false;

            }
        }

когда вы решите это, следующий шаг - проверить следующий код:

for (int i=0; i<inventory.length; i++){
            System.out.println("The inventory of Lipton is:" + inventory[i]);
           System.out.println("The inventory of Fanta is:" + inventory[i+2]);
                System.out.println("The inventory of Pepsi is:" +inventory[i+3]);
                System.out.println("The inventory of Gum is:" +inventory[i+4]);
                System.out.println("The inventory of Seeds is:" +inventory[i+5]);
                System.out.println("The inventory of Choco is:" +inventory[i+6]);   
    }

Вы делаете ту же ошибку (проверьте, что i + x)

Какая версия java вы используете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...