找到奇数的第一个出现并计算它们

时间:2013-01-18 04:17:19

标签: java arrays

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;
    }
}

我正在尝试在已提供的数组中找到第一次出现的奇数。我的计划有什么问题?我似乎无法让程序计算出第一次奇数事件。

4 个答案:

答案 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',否则它会给所有元素......