打印并返回正确的列表

时间:2014-12-31 12:49:26

标签: java list

我目前正在处理以下问题

// It should return the greatest common factor
    // between two numbers.  
    //
    // Examples of greatestCommonFactor:
    //   greatestCommonFactor(6, 4)   // returns 2
    //   greatestCommonFactor(7, 9)   // returns 1
    //   greatestCommonFactor(20, 30) // returns 10
    //
    // Hint: start a counter from 1 and try to divide both
    // numbers by the counter. If the remainder of both divisions
    // is 0, then the counter is a common factor. Continue incrementing
    // the counter to find the greatest common factor. Use a while loop
    // to increment the counter.

我的代码如下所示

public static List greatestCommonFactor(int a, int b){
        int i = 1 ;
        List topnum = new ArrayList();
        ArrayList <Integer> factor = new ArrayList<Integer>();
        while (i <= a || i <= b ){
            i++;
        }
        if (a%i == 0 && b%i == 0){
            factor.add(i);  
        }
        else if (a%i <= 1 || b%i <= 1){
            Collections.sort(factor);
            List<Integer> topnum1 = factor.subList(factor.size() - 1, factor.size());

        }
        return topnum;
    }

我遇到了输出正确输出的问题。目前我得到[]作为输出,这很奇怪。我似乎无法在topnum行中获得List<Integer>而不会收到错误,因此这是我可以管理的内容。

任何人都有任何提示让我打印topnum1中的元素来解决本教程吗?

2 个答案:

答案 0 :(得分:3)

你的while循环什么也没做。你应该把你的条件放在里面,或者只测试i的最后一个值。

while (i <= a || i <= b ){
    if (a%i == 0 && b%i == 0){
        factor.add(i);  
    }
    i++;
}

除此之外,您将元素添加到factor列表(至少在修复后),并将该列表的最后一个元素放在topnum1中,但您的方法返回topnum这仍然是空的。

最后,我的else if (a%i <= 1 || b%i <= 1)不明确。而且您不需要对factor列表进行排序。它已经排序了。实际上,您根本不需要该列表,只需保留最常见的i并将其返回。

这将使代码更加简单:

public static int greatestCommonFactor(int a, int b)
{
    int result = 1;
    int i = 1 ;
    while (i <= a && i <= b){
        if (a%i == 0 && b%i == 0){
            result = i;
        }
        i++;
    }

    return result;
}

答案 1 :(得分:0)

您实际上并未在任何地方更改topnum的值...

您所做的就是使用List topnum = new ArrayList();在顶部创建它,然后使用return topnum;在底部返回它。你没有添加任何东西。

如果您不知道如何在列表中添加内容,请使用.add()

 topnum.add(7);

这将在7topnum