Java 创建斐波那契序列,查找所有奇数之和

Java 创建斐波那契序列,查找所有奇数之和,java,algorithm,math,fibonacci,Java,Algorithm,Math,Fibonacci,我试图创建一个斐波那契序列,从1和2开始,以1000结尾。这部分我已经计算出来了,但它还需要返回所有奇数的总和。我想我已经知道了,但我一直得到不正确的结果 这是我的代码,谢谢你的帮助 公共类Fibonacci{ 公共静态void main(字符串[]args){ int n=1000,t1=1,t2=2,奇数=0; 系统输出打印(“斐波那契到“+n+”:”); 而(t1您正在跳过算法中的值 在将当前t1值添加到odd之前,请将其更新到下一个值 斐波那契序列是: t1 t2 t1 t2 t

我试图创建一个斐波那契序列,从1和2开始,以1000结尾。这部分我已经计算出来了,但它还需要返回所有奇数的总和。我想我已经知道了,但我一直得到不正确的结果

这是我的代码,谢谢你的帮助

公共类Fibonacci{
公共静态void main(字符串[]args){
int n=1000,t1=1,t2=2,奇数=0;
系统输出打印(“斐波那契到“+n+”:”);

而(t1您正在跳过算法中的值

在将当前
t1
值添加到
odd
之前,请将其更新到下一个值

斐波那契序列是:

t1  t2  t1  t2  t1  t2   t1   t2
1   2   3   5   8   13   21   34
不是添加1,而是将之前的
t1
更新为3,因此忽略1

while
循环中,尝试以下操作:

System.out.print(t1 + " + ");

if (t1 % 2 != 0) odd += t1;
t2 += t1;
t1 = t2 - t1;

因为我看到其他人提供了一个不错的答案,所以我喜欢用列表、流和递归来编写其他东西。你说你对编程相当陌生,所以不要犹豫,问问我的代码中发生了什么。尽管我主要是通过谷歌搜索自己来学习的

public class Fibonacci {

    private static final List<Integer> oddNumbers = new ArrayList<>();

    public static void main(String[] args) {

        generateFibonacciSequence(1000).forEach(number -> {
            if (number < 1000){
                System.out.println(number);

                if (number % 2 != 0){
                    oddNumbers.add(number);
                }
            }
        });
        System.out.println("sum of odd numbers = " + oddNumbers.stream().mapToInt(oddNumber -> oddNumber).sum());
    }

    public static IntStream generateFibonacciSequence(int limit) {
        AtomicInteger number = new AtomicInteger(0);
        return IntStream.generate(
                () -> fibonacci(number.incrementAndGet()))
                .takeWhile((numberValue -> numberValue < limit));
    }

    private static int fibonacci(int position) {
        if (position == 1 || position == 2) {
            return 1;
        }
        return fibonacci(position - 2) + fibonacci(position - 1); //recursion
    }
}
公共类Fibonacci{
私有静态最终列表oddNumbers=newarraylist();
公共静态void main(字符串[]args){
generateFibonacciSequence(1000).forEach(编号->{
如果(数量<1000){
系统输出打印项次(编号);
如果(编号%2!=0){
添加(数字);
}
}
});
System.out.println(“奇数之和=“+oddNumbers.stream().mapToInt(oddNumber->oddNumber.sum());
}
公共静态IntStream GENERATEF序列(int limit){
AtomicInteger编号=新的AtomicInteger(0);
返回IntStream.generate(
()->斐波那契(number.incrementAndGet())
.takeWhile((numberValue->numberValue
首先,第一个
t1
是奇数,你永远不会把它加到你的总数中。除了初始化
odd=1