此代码用于输入n
integer
值并计算编号。这些输入值中的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);
}
}
上面的代码可以正常工作并提供适当的输出。
做...在循环时
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);
}
}
上面的代码具有运行时异常,即
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at EvenOddCount.main(EvenOddCount.java:20)
答案 0 :(得分:5)
在原始代码中,您有两个单独的i
变量:
for(int i=0;i<n;i++)
...
for(int i=0;i<a.length;i++)
在您的do/while
版本中,您有一个 i
变量。完成第一个循环后,i
的值将为n
-但您从第二个循环开始而未将其重置为0,因此在第一次迭代时,它将不存在范围。
您可以通过添加以下内容来解决此问题:
i = 0;
就在第二个do
/ while
循环之前,但是请注意,如果{{1} }为0,因为直到迭代结束才检查条件。如果您使用:
n
和
while (i < n)
相反,它将在第一次迭代之前检查条件,因此它将在while (i < a.length)
为0时执行0次。(尽管您仍然需要在第二个循环之前将n
重置为0。)
答案 1 :(得分:0)
U需要重置i的值:
do
{
a[i] = sc.nextInt();
i++;
} while (i<n);
i =0;
do
{
if(a[i]%2==0)
evenCount++;
else
oddCount++;
i++;
} while (i<a.length);