如何在Java中解决线程错误(ArrayIndexOutOfBoundsException)中的异常?

0 java arrays do-while

此代码用于输入n integer值并计算no.的evenodd值的那些输入值中.

这个java代码显示了ArrayIndexOutOfBoundsException何时使用do..while循环,但是当使用for循环时它工作正常.没有改变任何事情只是重新安排语法,以便将for循环转换为do while循环.

对于循环:

import java.util.*;

public class EvenOddCount
{
    public static void main(String args[]) throws Exception
{
    System.out.print("Enter the no. of inputs to be taken : ");
    int evenCount=0, oddCount=0;
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int a[] = new int[n];
    System.out.println("Enter the inputs : ");
    for(int i=0;i<n;i++)
        a[i] = sc.nextInt();
    for(int i=0;i<a.length;i++)
    {
        if(a[i]%2==0)
            evenCount++;
        else 
            oddCount++;
    }
    System.out.println("\nThe number of even numbers in input numbers are : "+evenCount);
    System.out.println("The number of odd numbers in input numbers are : "+oddCount);
}
} 
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常,并提供合适的输出.

做......循环时:

import java.util.*;

public class EvenOddCount
{
public static void main(String args[]) throws Exception
{
    System.out.print("Enter the no. of inputs to be taken : ");
    int evenCount=0, oddCount=0, i=0;
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int a[] = new int[n];
    System.out.println("Enter the inputs : ");
    do
    {
        a[i] = sc.nextInt();
        i++;
    } while (i<n);
    do
    {
        if(a[i]%2==0)
            evenCount++;
        else 
            oddCount++;
        i++;
    } while (i<a.length);
    System.out.println("\nThe number of even numbers in input numbers are : "+evenCount);
    System.out.println("The number of odd numbers in input numbers are : "+oddCount);
}
} 
Run Code Online (Sandbox Code Playgroud)

上面的代码有一个运行时异常,即

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at EvenOddCount.main(EvenOddCount.java:20)
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

在原始代码中,您有两个单独的i变量:

for(int i=0;i<n;i++)
...

for(int i=0;i<a.length;i++)
Run Code Online (Sandbox Code Playgroud)

在您的do/while版本中,您有一个 i变量.一旦你完成了第一个循环,它的值i将是n- 但是你从第二个循环开始而不将它重置为0,所以在第一次迭代时它将超出范围.

你可以通过添加:

i = 0;
Run Code Online (Sandbox Code Playgroud)

就在第二个do/ while循环之前,但要注意,如果为0,你仍然会遇到问题(即使在第一个循环中)n,因为在迭代结束之前你没有检查条件.如果您使用:

while (i < n)
Run Code Online (Sandbox Code Playgroud)

while (i < a.length)
Run Code Online (Sandbox Code Playgroud)

相反,它将在第一次迭代之前检查条件,因此当n它为0时它将执行0次.(你仍然需要i在第二次循环之前重置为0.)