import java.util.*;
public class FirstOddOccurrence {
public static void main(String[] args) {
int[] x = {2, 4, 6, 7, 4, 3, 2, 7, 6, 7, 7};
int i;
display(x);
System.out.printf("# Occurrences of first odd = %3d\n", firstOddCount(x));
}
private static void display(int[] x) {
int i;
System.out.print("Array: ");
for (i = 0; i < x.length; i++) {
if (i < x.length - 1)
System.out.printf("%3d, ", x[i]);
else
System.out.printf("%3d\n", x[i]);
}
}
public static int odd(int[] x) {
int i;
int y;
for (i = 0; i < x.length; i++) {
y = x[i] % 2;
if (y == 1) {
return x[i];
} else {
return 0;
}
}
return x[i];
}
public static int firstOddCount(int x[]) {
int i;
int c = 0;
for (i = 0; i < x.length; i++) {
if (x[i] == odd(x))
c++;
}
return c;
}
}
我正在尝试在已提供的数组中找到第一次出现的奇数。我的计划有什么问题?我似乎无法让程序计算出第一次奇数事件。
答案 0 :(得分:2)
您的代码在这里:
if (y == 1) {
return x[i];
} else {
return 0;
}
不起作用 - 如果测试的数字是偶数,则立即返回0
。相反,你想跳过这些偶数并等到奇数出现。最后,如果您没有找到任何奇数,则返回0
。以下是odd()
的更正版本:
int i;
int y;
for (i = 0; i < x.length; i++) {
y = x[i] % 2;
if (y == 1) {
return x[i];
}
}
return 0;
答案 1 :(得分:1)
Andr的解决方案可以解决您的问题;如果x [0]是偶数,则奇数(x)将返回0,如果是奇数,则返回x [0]。
您还可以像这样改进firstOddCount:odd(x)将始终返回相同的值,因此只计算一次。
public static int firstOddCount(int x[]) {
int firstOdd = odd(x);
int c=0;
for(int i=0; i < x.length; i++) {
if (x[i]==firstOdd)
c++;
}
return c;
}
答案 2 :(得分:0)
您遇到的问题是,如果找到偶数,则返回0
。这意味着列表{2, 4, 6, 8, 1}
会将0
而不是1
作为第一个奇数。
但是,按照您组织程序的方式,您要处理列表中的第一个全偶数部分,一次在odd()
中查找第一个奇数,然后再在{{1}中处理计算有多少这个数字 - 完全是不必要的。
一旦找到第一个奇数,我认为你可以合理确定该空间中不存在该数字(或任何其他奇数)你已经搜索过了。否则它将是第一个奇数。因此,回过头再看一下列表的初始部分是没有意义的。
您可以轻松处理列表一次的方式如下:
firstOddCount()
答案 3 :(得分:-1)
如果你试图从群组中获取一个元素,当你的条件第一次匹配时,你应该使用'break',否则它会给所有元素......