0
我想要得到五個數字的組合,其中總和等於20,其平均值等於某個指定值。如何將遞歸方法轉換爲java中的非遞歸
我的代碼是
package Others;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class RandomNumbers {
/**
* @param args
*/
// Max average = 3.6 ///Min average=2.2
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Integer> i = getNumbers();
}
public static List<Integer> getNumbers() {
List<Integer> n = new ArrayList<Integer>();
Random r = new Random();
for (int i = 0; i < 5; i++) {
int rr = r.nextInt(10);
n.add(rr);
}
int sum = 0;
double average = 0;
for (int j = 0; j < n.size(); j++) {
sum += n.get(j);
average += ((j + 1) * n.get(j));
System.out.println(n.get(j));
}
System.out.println("Avearge:" + average/20);
if (sum == 20 && (average/20) == 2.1) {
getCombination(n);
} else {
getNumbers();
}
return n;
}
public static void getCombination(List<Integer> n) {
int total = 0;
for (int i = 0; i < n.size(); i++) {
total += n.get(i);
if (n.get(i) == 0) {
getNumbers();
} else {
System.out.println("Item: " + i + ":" + n.get(i));
}
}
System.out.println("Total:" + total);
}
}
它是爲平均值做工精細,從2.2到3.6。當我們給未在2.2和3.6之間它給錯誤的
Exception in thread "main" java.lang.StackOverflowError
at sun.nio.cs.SingleByte.withResult(Unknown Source)
at sun.nio.cs.SingleByte.access$000(Unknown Source)
at sun.nio.cs.SingleByte$Encoder.encodeArrayLoop(Unknown Source)
at sun.nio.cs.SingleByte$Encoder.encodeLoop(Unknown Source)`package Others;
我搜索的一些網站,其中有些建議是避免重複和使用iterators.But我在困惑如何等數使用迭代器重新開發這個程序。
這是需要我的項目。 任何幫助,將不勝感激。請幫幫我。
你更喜歡使用遞歸嗎?如果您喜歡遞歸,則無需切換到迭代。只要刪除錯誤。開始寫幾個測試。 –
如果「5」數字的總和是「20」,我們可以得到一個不等於「4」的平均值嗎? – arunmoezhi
@arunmoezhi看起來他沒有找到數字列表的平均值,儘管他在帖子中說了什麼。也就是說,我不知道他究竟在稱「平均水平」。 – IllusiveBrian