我目前正在处理以下问题
// 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
中的元素来解决本教程吗?
答案 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);
这将在7
到topnum
。