2 Replies - 489 Views - Last Post: 28 October 2010 - 01:04 PM Rate Topic: -----

#1 Odaym  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 30
  • Joined: 06-January 10

Array out of bounds? Really lost here...

Posted 28 October 2010 - 12:17 PM

Hello, I have the following predicament..A 2d array which has 3 employees let's say, in each employee, there is an array of 5 elements, Sales,Quota,Taxes,TotalEarnings and NetEarnings. a lot of exceptions are required, and are implemented and explained in comments. but I am always getting "Array out of bounds on line X", every line that gives this error, has [j + 4].. isn't j + 4 supposed to mean the fifth cell? I'm really desperate here, thank you very much in advance!

import javax.swing.JOptionPane;

public class NetEarnings
{
    public static void main (String args[])
    {
        int N = Integer.parseInt (JOptionPane.showInputDialog("Enter number of Salespersons : "));
        
        double Salesp[][] = new double[N][5];

        for (int i = 0; i < Salesp.length; i++)
        {
            String sales = JOptionPane.showInputDialog ("Start entering sales amount for Salesperson #" +(i + 1)+ " : ");
            String quota = JOptionPane.showInputDialog ("Start entering the quota for Salesperson #" +(i + 1)+ " : ");

            for (int j = 0; j < (Salesp[i].length) - 3; j++)
            {
                Salesp[i][j] = Integer.parseInt(sales);
                Salesp[i][j + 1] = Integer.parseInt(quota);
                
                if (Salesp[i][j] >= (Salesp[i][j + 1] + (Salesp[i][j + 1] * 0.2)))    
                {    //if bigger than quota by 20%
    
                    Salesp[i][j + 3] = Salesp[i][j] + 200;
                    //add 200 to TotalEarnings

                    if (Salesp[i][j + 3] > 2000)
                    {
                        Salesp[i][j + 2] = Salesp[i][j] * 0.05;
                        //calculate tax
                        Salesp[i][j + 4] = Salesp[i][j] - Salesp[i][j + 2];
                        //put remainder after tax, in NetEarnings
                    }
                }
                
                else if (Salesp[i][j] == Salesp[i][j + 1])     
                {    //if equal to quota

                    Salesp[i][j + 3] = Salesp[i][j] + (Salesp[i][j] * 0.06);    
                    //6% commission rate added
    
                    if (Salesp[i][j + 3] > 1500)
                    {
                        Salesp[i][j + 2] = Salesp[i][j] * 0.04;
                        Salesp[i][j + 4] = Salesp[i][j] - Salesp[i][j + 2];
                        //put remainder after tax, in NetEarnings
                    }
                }
                
                else if (Salesp[i][j] == (Salesp[i][j + 1] * 0.8))    
                {    //if 80% of quota

                    Salesp[i][j + 3] = Salesp[i][j] + (Salesp[i][j] * 0.05);    
                    //5% commission rate added
    
                    if (Salesp[i][j + 3] < 1500)
                    {
                        Salesp[i][j + 2] = Salesp[i][j] * 0.03;
                        Salesp[i][j + 4] = Salesp[i][j] - Salesp[i][j + 2];
                        //put remainder after tax, in NetEarnings
                    }
                }
                
                else
                    Salesp[i][j + 3] = Salesp[i][j + 4] = Salesp[i][j];
            }
        }

        String s = "";
        
        for (int i = 0; i < Salesp.length; i++)
        {
            for (int j = 0; i < Salesp[i].length; j++)
            {
                s += "The taxes of Salesperson #" +(i + 1)+ " are : "+ Salesp[i][j + 2] +"."+ " Their Total Earnings are : " +Salesp[i][j + 3] + "."+ " And their Net Earnings are : " +Salesp[i][j + 4]+ ".";
            }
        }

        JOptionPane.showMessageDialog (null,s);  
    }
}


Is This A Good Question/Topic? 0
  • +

Replies To: Array out of bounds? Really lost here...

#2 moopet  Icon User is offline

  • binary decision maker
  • member icon

Reputation: 339
  • View blog
  • Posts: 1,185
  • Joined: 02-April 09

Re: Array out of bounds? Really lost here...

Posted 28 October 2010 - 12:51 PM

for (int j = 0; j < (Salesp[i].length) - 3; j++)


So in your case of 5 elements, j goes from 0 up to but not including (5 - 3), in other words, from 0 to 1.
Then you have this:
Salesp[i][j + 4] = Salesp[i][j] - Salesp[i][j + 2];


so second time round the loop, j = 1, and j + 4 = 5. Since the array is zero-indexed, it contains 5 elements numbered 0, 1, 2, 3 and 4.
5 > 4, hence array index out of bounds.

I think your logic is wonky when building that for loop in the first place, though.
Was This Post Helpful? 0
  • +
  • -

#3 n8wxs  Icon User is offline

  • --... ...-- -.. . -. ---.. .-- -..- ...
  • member icon

Reputation: 972
  • View blog
  • Posts: 3,878
  • Joined: 07-January 08

Re: Array out of bounds? Really lost here...

Posted 28 October 2010 - 01:04 PM

The problem is the display loop. You don't offset into the second dimension of the array but use it's contents directly:

for (int i = 0; i < Salesp.length; i++) {
    s += "The taxes of Salesperson #"
            + (i + 1) + " are : "
            + Salesp[i][2] + "."
            + " Their Total Earnings are : "
            + Salesp[i][3] + "."
            + " And their Net Earnings are : "
            + Salesp[i][4] + ".\n";
}



The same would be true for the earlier loops. The second dimension has a fixed size so you want to directly index it.

This post has been edited by n8wxs: 28 October 2010 - 01:06 PM

Was This Post Helpful? 0
  • +
  • -

Page 1 of 1