此代码用于输入n integer值并计算no.的even和odd值的那些输入值中.
这个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)
在原始代码中,您有两个单独的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.)