比较多因素计算的优势和劣势

时间:2015-06-11 04:18:46

标签: java performance

以下是考题。它告诉我使用正确性,设计,效率和可读性的标准来评论每个实现的优点和缺点。(即,进行错误检查以及是否可以进行任何改进?)

问题:

方法foo1和foo2用于计算正数 正整数的因子。例如,12的6个因子是1,2,3,4, 6和12,所以foo1(12)或foo2(12)应该返回6。

private int foo1(int n) {
2 for (int i = 0; i <= n; i++) {
3 if (n % i = 0) {
4 return i;
5 }
6 }
7 }
8
9
10 public int foo2(int n) {
11 int count = 1;
12 for (int i = 1; i < n; i++) {
13 if (n % i == 0) {
14 count = count + 1;
15 }
16 }
17 return count

我的回答是: foo1具有更高的效率,因为它不需要重复计算eveyrtime。 然而,Foo1在lane3中有错误的语法 if(n%i = 0)应为if(n%i == 0); 此外,foo1对输入参数“12”的返回将是12而不是预期的“6”; 另外,foo1中的返回语句未完成,“返回1”应该在for循环之外添加。 最后,如果该方法是私有的,则其他类不能使用它。

还有其他建议吗?我的想法是否足够彻底?

由于

1 个答案:

答案 0 :(得分:-1)

我的实施:

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class Factor {

    public static List<Integer> foo1(int n) {
        List<Integer> list = new ArrayList<Integer>();
        list.add(1);
        for(int i = 2; i < Math.sqrt(n); i++) {
            if(n%i == 0) {
                list.add(i);
                list.add(n/i);
            }
        }
        list.add(n);
        list.sort(new Comparator<Integer>() {

            @Override
            public int compare(Integer o1, Integer o2) {
                return o1.compareTo(o2);
            }
        });
        return list;
    }

    public static int foo2(int n) {
        int count = 2;
        for(int i = 2; i < Math.sqrt(n); i++) {
            if(n%i == 0) {
                count+=2;
            }
        }
        return count;
    }

    public static void main(String[] args) {
        int n = 12;
        for(Integer i: foo1(n)) {
            System.out.println(i);
        }
        System.out.println(foo2(n));
    }

}