Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

I get an java.lang.ArrayIndexOutOfBoundsException when a user inputs a negative

ID: 3624293 • Letter: I

Question

I get an java.lang.ArrayIndexOutOfBoundsException when a user inputs a negative number. How do I count and sort a negative number? I know it's not possible to pass a negative array. Right?

Here is the code. 

public class NumberSorter

{

      public static void main(String[] args)

      {

            Scanner input = new Scanner(System.in);

 

            System.out.println("How many? ");

            int size = input.nextInt();

            int[] numbers = new int[size];

 

            System.out.println("Enter " + numbers.length + " numbers.");

            for(int i = 0; i < size; i++)

            {

                  int number = input.nextInt();

                  numbers[i] = number;

            }

 

            Arrays.sort(numbers);

            int largestNum = numbers[numbers.length-1];

 

            int[] count = new int[largestNum+1];

 

            for (int currentNumber : numbers)

            {

                  count[currentNumber]++;

            }

 

            System.out.println("Number " + " " + "Count");

 

            for(int i = 0, length = count.length; i < length; i++)

            {

                  if(count[i] != 0)

                  {

                        System.out.println(i + " " + count[i]);

                  }

            }

      }

}

 

Thanks in advance for the help! It's much appreciated! 

Explanation / Answer

please rate - thanks

import java.util.*;
public class NumberSorter

{

      public static void main(String[] args)

      {

            Scanner input = new Scanner(System.in);

            int size;
            do
                {
            System.out.println("How many? ");

            size = input.nextInt();
                if(size<=0)
                     System.out.println("must be positive!");
            }while (size<=0);
            int[] numbers = new int[size];



            System.out.println("Enter " + numbers.length + " numbers.");

            for(int i = 0; i < size; i++)

            {

                  int number = input.nextInt();

                  numbers[i] = number;

            }



            Arrays.sort(numbers);

            int largestNum = numbers[numbers.length-1];
            int smallestNum=numbers[0];
            int items;
            if(smallestNum<0)
                     items=Math.abs(smallestNum);
                else
                     items=0;
            int[] count = new int[largestNum+1+ items];



            for (int currentNumber : numbers)

            {     int num;
                          num=currentNumber+items;

                  count[num]++;

            }



            System.out.println("Number " + " " + "Count");



            for(int i = 0, length = count.length; i < length; i++)

            {

                  if(count[i] != 0)

                  {

                        System.out.println(i-items + " " + count[i]);

                  }

            }

      }

}