当前位置: 首页 > 知识库问答 >
问题:

显示从最小数量到最大数量的库存数组时出错(Java)

沙海
2023-03-14

好吧,基本上我做了一个自动售货机程序。当用户购买等于或大于其成本的商品时,该商品的库存将耗尽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

要做到这一点,这里是我使用的循环:私有的空CheckInventoryActionPerform(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)

等。

我不知道这些错误告诉我什么。但我已经做了一些事情来尝试纠正这一点。首先,我运行了调试功能,但没有找到任何内容。我仔细检查了每个int stock、int stock 2、int stock 3等是否为循环上方的每个部分正确定义,等等。

这是我在自动售货机上可以买到的每一部分的代码。基本上每个项目都是复制和粘贴的,除了我更改价格和调用图像:如果需要,我还可以粘贴更多代码。Lipton和Fanta:

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个答案

鄢子平
2023-03-14

好的,请看下面的代码:

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”将从0变为库存。长度-1,包括在内。例如,以最极端的情况为例

i = inventory.length()-1

现在,让我们看看您的程序将执行什么操作。

它首先从打印开始

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

这里没什么问题。然而,下一行是程序开始失败的地方。

i 2将是库存。长度1!显然,这超出了库存的数组索引。

宗政楚
2023-03-14

循环所有数组并获取下一个位置进行比较,当您在数组末尾并转到下一个位置时,您会得到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?

 类似资料:
  • 我正在制作一个数组,它从1-100生成随机数。然后,在最后,我将从列表中输出最大值和最小值。但是,我不知道如何找到/调用max和min,我尝试使用math方法函数(如math.min()),但我认为它对数组不起作用。这是我的代码(下划线是我想要调用最大值和最小值的地方,但我不知道如何调用)。 }

  • 问题内容: 我正在寻找一种方法来计算等于组的最小或最大项目数。我每隔几天收到一次商品,每两周输入一次。我需要查看每个EntryDate的最小值和最大值ReceivedDate,以及最小值和最大值处的项目计数。在MS Access中使用SQL。 输入 当前查询 电流输出 期望的输出 问题答案: 我不知道MS Access是否允许这样的子查询。如果这不起作用,请让我知道,我将删除答案。否则:

  • 在Linux中使用read()syscall从任何源(文件、套接字、管道)读取数据时,是否存在可以返回的最小数据量(在阻塞模式下)?或者系统调用甚至可以返回1字节? 当我想从管道中读取单个int(4或8个字节)时,我是否仍然需要检查read()的返回值以查看接收到的字节是否少于sizeof(int)字节?

  • 计算newArr数组所有对象中arr二维数组,比较后返回其中的[[最小值,最小值],[最大值,最大值]]; 要这种结果[[39.867638888888884, 115.39333333333333], [50.97152777777777, 120.31527777777778]]

  • 问题内容: 上下文:我正在构建一个读取rss feed并在后台更新/检查feed的小站点。我有一个数组来存储要显示的数据,另一个数组来存储已显示的记录的ID。 问题:在事情变慢或变慢之前,数组可以在Javascript中容纳多少个项目。我没有对数组进行排序,但是正在使用jQuery的inArray函数进行比较。 该网站将保持运行状态,并进行更新,并且不太可能经常重启/刷新浏览器。 如果我想从数组中

  • 问题内容: 我最近一直在复制和移动大量文件(约40万个)。我知道在Bash命令行上可以扩展的参数数量有限制,因此我一直在使用xargs来限制产生的数量。 出于好奇,我想知道我可以使用的最大参数数目是多少,我发现这篇文章说它是依赖于系统的,我可以运行以下命令来找出: 令我惊讶的是,我回来的答案是: 刚刚超过 260万 。正如我所说,我要处理的文件数量要少得多,大约为40万。我绝对需要使用移动和复制这