Java 执行while循环异常

Java 执行while循环异常,java,exception,do-while,Java,Exception,Do While,这段代码的目的是获取十个用户输入整数,并找到最大值以及该最大值的索引。对于这个特定的版本,我需要使用do-while循环 我可以输入十个数字,但是,在尝试获取最大数字及其索引时出现异常。我不完全确定如何着手解决这个问题。任何帮助或建议都将不胜感激,谢谢 final int[] numbers; numbers = new int[10]; int largest = numbers[0]; int largest_i = 0; int counter = 0; final Scanner ke

这段代码的目的是获取十个用户输入整数,并找到最大值以及该最大值的索引。对于这个特定的版本,我需要使用do-while循环

我可以输入十个数字,但是,在尝试获取最大数字及其索引时出现异常。我不完全确定如何着手解决这个问题。任何帮助或建议都将不胜感激,谢谢

final int[] numbers;
numbers = new int[10];
int largest = numbers[0];
int largest_i = 0;
int counter = 0;

final Scanner keyboard = new Scanner(System.in);

System.out.println("Please enter 10 numbers: ");


do {
    numbers[counter] = keyboard.nextInt();
    counter++;
} while (counter < numbers.length);

if (numbers[counter] >= largest) {
    largest = numbers[counter];
    largest_i = counter;
}
System.out.print("The largest number is: " + largest);
System.out.println(" ");
System.out.print("That number is stored at index " +  largest_i);
final int[]数字;
数字=新整数[10];
int最大=数字[0];
int最大_i=0;
int计数器=0;
最终扫描仪键盘=新扫描仪(System.in);
System.out.println(“请输入10个数字:”);
做{
数字[计数器]=键盘.nextInt();
计数器++;
}while(计数器=最大值){
最大=数字[计数器];
最大_i=计数器;
}
系统输出打印(“最大数字为:“+最大”);
System.out.println(“”);
系统输出打印(“该数字存储在索引”+最大值i);

您可能会遇到索引越界异常。这是因为您在循环外执行if检查

if (numbers[counter] >= largest)...
然而,此时计数器是10,而索引只从0到9

将if块移动到循环中以检查最大值

do {
    numbers[counter] = keyboard.nextInt();
    if (numbers[counter] >= largest) {
       largest = numbers[counter];
       largest_i = counter;
    }
    counter++;
} while (counter < numbers.length);
do{
数字[计数器]=键盘.nextInt();
if(数字[计数器]>=最大值){
最大=数字[计数器];
最大_i=计数器;
}
计数器++;
}while(计数器
以下是找到最大数字的方法:

public static void main(String[] args) {
        final int[] numbers;
        numbers = new int[10];
        int largest = Integer.MIN_VALUE;//set largest to minimum value

        int counter = 0;
        int index = 0;

        final Scanner keyboard = new Scanner(System.in);

        System.out.println("Please enter 10 numbers: ");


        do {
            numbers[counter] = keyboard.nextInt();//get the numbers here
            keyboard.nextLine();
            if(numbers[counter]>largest){//compare the entered number with the current largest number, if greater assign largest to the current number
                largest = numbers[counter];
                index = counter;//store the index of the largest number found 
            }
            counter++;//increment array counter
        } while (counter < numbers.length);

        System.out.print("The largest number is: " + largest);
        System.out.println(" ");
        System.out.print("That number is stored at index " +  index);

    }
publicstaticvoidmain(字符串[]args){
最终整数[]个数;
数字=新整数[10];
int max=Integer.MIN_VALUE;//将最大值设置为最小值
int计数器=0;
int指数=0;
最终扫描仪键盘=新扫描仪(System.in);
System.out.println(“请输入10个数字:”);
做{
numbers[counter]=keyboard.nextInt();//在此处获取数字
keyboard.nextLine();
如果(数字[计数器]>最大值){//将输入的数字与当前最大值进行比较,如果较大,则将最大值分配给当前数字
最大=数字[计数器];
index=counter;//存储找到的最大数字的索引
}
计数器+++;//递增数组计数器
}while(计数器
您可以发布异常和堆栈跟踪吗?请发布异常堆栈跟踪在
do while
循环中输出
if
块。实际上,您1)只检查单个数字是否最大,2)当其值必然大于
数字的最大索引时,使用
计数器
,而
循环
计数器
变量正好等于数组的大小,这意味着您试图访问一个超过其边界的值。除了indexoutofbound异常之外,您查找max number的逻辑不正确