[英]Index out of bounds Exception but can't figure out what is wrong
Basically I have to take user input until they enter 0 and then find the max, number of negative numbers, and sum of positive numbers in the array. 基本上,我必须接受用户输入,直到他们输入0,然后在数组中找到最大值,负数和正数之和。 The problem is I have to use and array and cannot use ArrayList to call the other methods so I thought I would create an ArrayList and use the elements of that to create an array since there is an unspecified number of elements in the array. 问题是我必须使用和数组,并且不能使用ArrayList调用其他方法,因此我认为我将创建一个ArrayList并使用该数组的元素来创建数组,因为数组中没有指定数量的元素。 I keep getting this as errors and have tried everything I could think of. 我一直认为这是错误,并尝试了所有我能想到的。 Please help. 请帮忙。
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at Assignment9.assignment9(Assignment9.java:37)
at Assignment9.assignment9(Assignment9.java:49)
at Assignment9.assignment9(Assignment9.java:49)
at Assignment9.assignment9(Assignment9.java:49)
at Assignment9.main(Assignment9.java:17)
//Class Description: Takes user input and makes it into an array until 0 is entered.
// It then computes the maximum #, amount of negative #s and the sum of the positive #s.
import java.util.*;
import java.text.*;;
public class Assignment9 {
//main method initializes variables then calls method assignment9
public static void main(String[] args)
{
int count = 0;
ArrayList<Double> help = new ArrayList<Double>();
assignment9(help, count);
}//end main
//adds user input to array until 0 is entered; it then calls other methods
public static void assignment9(ArrayList<Double> help, int count)
{
DecimalFormat fmt = new DecimalFormat("#.##");
double input;
double max = 0;
int negative = 0;
double sum = 0;
Scanner scan = new Scanner(System.in);
input = scan.nextInt();
if (input == 0)
{
double[] numbers = new double[help.size()];
for(int i = 0; i < numbers.length; i++)
{
numbers[i] = help.get(i);
}
findMax(numbers, count, max);
countNegative(numbers, count, negative);
computeSumPositive(numbers, count, sum);
System.out.println("The maximum numer is " + fmt.format(max));
System.out.println("The total number of negative numbers is " + negative);
System.out.println("The sum of positive numbers is " + fmt.format(sum));
System.exit(0);
}else{
help.add(input);
count++;
assignment9(help, count);
}//end if
}//end assignment9
//compares elements of array to find the max until count = -1
public static double findMax(double[] numbers, int count, double max)
{
if (count == -1)
{
return max;
}else if(numbers[count] > max){
max = numbers[count];
count--;
findMax(numbers, count, max);
}//end if
return max;
}//end findMax
public static int countNegative(double[] numbers, int count, int negative)
{
if(count == -1)
{
return negative;
}else if(numbers[count] < 0){
negative++;
count--;
countNegative(numbers, count, negative);
}
return negative;
}//end countNegative
public static double computeSumPositive(double[] numbers, int count, double sum)
{
if(count == -1)
{
return sum;
}else{
sum = sum + numbers[count];
count++;
computeSumPositive(numbers, count, sum);
return sum;
}
}//end computeSumPositive
}//end class } //结束课程
The problem is that you are passing in the number count
into findMax
and it's throwing an ArrayIndexOutOfBoundsException
while attempting to access the upper limit on this line: 问题是,你是通过在数count
到findMax
和它抛出一个ArrayIndexOutOfBoundsException
试图访问该线路上上限:
} else if (numbers[count] > max) {
Remember arrays in Java are zero based. 请记住,Java中的数组是从零开始的。 Also, as Java uses pass by value you need to assign the result to the output of findMax
: 另外,由于Java使用按值传递,因此您需要将结果分配给findMax
的输出:
max = findMax(numbers, count - 1, 0);
Logically, findMax
will always return the last number rather than the highest number. 从逻辑上讲, findMax
将始终返回最后一个数字,而不是最大数字。 You need to return the temporary max
from within the recursive method: 您需要从递归方法中返回临时max
:
double findMax(double numbers[], int count, int index) {
// This needs to be size - 1 because the array is 0-indexed.
// This is our base case
if (index == count - 1)
return numbers[index];
// Call the function recursively on less of the array
double result = findMax(numbers, count, index + 1);
// Return the max of (the first element we are examining, the max of the
// rest of the array)
if (numbers[index] > result)
return numbers[index];
else
return result;
}
This version handles the count
index upper limit internally: 此版本内部处理count
索引上限:
max = findMax(numbers, count, 0);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.