class Check {
static void countOddEven(int a[], int n) {
int countEven = 0, countOdd = 0;
for (int item : a) {
if (item % 2 == 0) {
countEven++;
}
}
countOdd = n - countEven;
System.out.println(countOdd + " " + countEven);
}
}
代码用于计算数组中的偶数和奇数。请帮助优化代码。
答案 0 :(得分:1)
您输入的代码不正确。
如果要计算a
中的偶数和奇数,那么您正在正确地计算偶数。如果n
不等于a
的长度,则您对奇数计数的计算不正确。
如果,另一方面-我只是在猜测-您是要在第一个n
元素中计算偶数和奇数,那么您要对所有偶数进行迭代,因此您错误地计算了偶数a
中的。同样在这种情况下,如果n
的长度比a
的长度小得多,则可以进行优化,仅按需迭代前n
个元素。
最后,您可以尝试以下版本。我怀疑它不会为您买任何东西,但是我将测量留给您了。
int countOdd = 0;
for (int ix = 0; ix < n; ix++) {
countOdd += a[ix] & 1;
}
int countEven = n - countOdd;
诀窍是:a[ix] & 1
为您提供a[ix]
的最后一位。奇数为1,偶数为0(正或负)。因此,我们实际上为每个奇数加1。
答案 1 :(得分:0)
您应该尝试使用for循环而不是每个循环运行代码
因为
访问数组时,至少使用原始数据 for循环要快得多。 然而 访问集合时, foreach 的速度明显快于基本for循环的数组访问速度。
但是如果您遇到其他错误,则在调用该方法时可能做错了什么(确保n =数组的长度)
这是带有main方法的整个代码。
class Check{
static void countOddEven(int a[], int n){
int countEven=0,countOdd=0;
for(int i=0;i<n;i++)
if(a[i]%2==0)
{
countEven++;
}
countOdd=n-countEven;
System.out.println(countOdd+" "+countEven);
}
public static void main(String[] arg){
int a[]={2,3,4,5,6};
int n = 5;
countOddEven(a,n);
}
}