谁能用java写这个程序

img

实在不会求比值,有没有哥们来帮一下 这个题目实在有点难度 太多了对于我这个初学者来说



import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入数列的前k项:");
        int k = scanner.nextInt();

        // 创建一个数组用于存储斐波那契数列的前k项
        int[] sequence = new int[k];

        // 计算斐波那契数列的前k项
        if (k >= 1) {
            sequence[0] = 1;
            System.out.print(sequence[0] + " ");
        }
        if (k >= 2) {
            sequence[1] = 1;
            System.out.print(sequence[1] + " ");
        }
        if (k >= 3) {
            for (int i = 2; i < k; i++) {
                sequence[i] = sequence[i - 1] + sequence[i - 2];
                System.out.print(sequence[i] + " ");
            }
        }

        // 计算第k项和第k-1项的比值
        if (k >= 2) {
            double ratio = (double) sequence[k - 1] / sequence[k - 2];
            System.out.println("\n第" + k + "项和第" + (k - 1) + "项的比值:" + ratio);
        }
    }
}

在程序中,我们使用一个整型数组 sequence 存储斐波那契数列的前k项。然后,我们使用循环计算斐波那契数列的前k项并输出。最后,如果k大于等于2,我们计算第k项和第k-1项的比值并输出。

img


如果有帮助给个采纳谢谢

hello,我可以解决这个问题

这个简单
static int fun(int k) {
    if (k == 1 || k == 2)
        return 1;
    return fun(k-2)+fun(k-1);
}
static void main() {
    Scanner sc = new Scanner(System.in);
    k = sc.nextInt();
    System.out.println(fun(k) + ", " + fun(k+1));
}

参考下:

import java.util.Scanner;

public class FibonacciSeries {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入要输出的项数 k:");
        int k = scanner.nextInt();
        
        // 初始化数列的前两项
        int a = 1, b = 1;
        int kMinus1 = 0, kth = 0;
        
        // 输出前k项并计算第k项和k-1项的值
        System.out.print("数列的前 " + k + " 项为:");
        for (int i = 1; i <= k; i++) {
            System.out.print(a + " ");
            if (i == k - 1) {
                kMinus1 = a;
            } else if (i == k) {
                kth = a;
            }
            int temp = a + b;
            a = b;
            b = temp;
        }
        
        System.out.println("\n第 " + k + " 项的值为:" + kth);
        System.out.println("第 " + (k - 1) + " 项的值为:" + kMinus1);
    }
}

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7477075
  • 这篇博客你也可以参考下:使用java对大量存在重复且不规律的数据进行统计分析【数据清洗模块】(如需借鉴,请务必标明作者)
  • 你还可以看下java参考手册中的 java-学习Java语言 - 描述Java编程语言的基本概念和特点的课程。-泛型是Java编程语言的一个强大功能。它们提高了代码的类型安全性,使更多的错误可以在编译时发现。-野生动物
  • 除此之外, 这篇博客: 一文深入Java浅拷贝和深拷贝中的 那么为什么我们自定义对象是可变包装类又特殊不可变呢? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 其原因是遵守不可变原则,即Immutable设计模式:
    1. 类添加final修饰符,保证类不被继承。
    2. 保证所有成员变量必须私有,并且加上final修饰(不可变指的是引用不可变,也就是不可以重新指向其他对象)
    3. 不提供改变成员变量的方法,包括setter
    4. 通过构造器初始化所有成员,进行深拷贝(deep copy)
    5. 在getter方法中,不要直接返回对象本身,而是克隆对象,并返回对象的拷贝
    • 比如我们随便拿一个包装类Double类分析一下
    public final class Double extends Number implements Comparable<Double> {
        public static final double POSITIVE_INFINITY = 1.0 / 0.0;
    
        public static final double NEGATIVE_INFINITY = -1.0 / 0.0;
    
        public static final double NaN = 0.0d / 0.0;
    
        public static final double MAX_VALUE = 0x1.fffffffffffffP+1023; // 1.7976931348623157e+308
    
        public static final double MIN_NORMAL = 0x1.0p-1022; // 2.2250738585072014E-308
    
        @SuppressWarnings("unchecked")
        public static final Class<Double>   TYPE = (Class<Double>) Class.getPrimitiveClass("double");
    
        public static String toString(double d) {
            return FloatingDecimal.toJavaFormatString(d);
        }
    
        public static Double valueOf(String s) throws NumberFormatException {
            return new Double(parseDouble(s));
        }
    
     
        public static Double valueOf(double d) {
            return new Double(d);
        }
    
        public static double parseDouble(String s) throws NumberFormatException {
            return FloatingDecimal.parseDouble(s);
        }
    
    
        public static boolean isNaN(double v) {
            return (v != v);
        }
    
        public static boolean isInfinite(double v) {
            return (v == POSITIVE_INFINITY) || (v == NEGATIVE_INFINITY);
        }
    
        public static boolean isFinite(double d) {
            return Math.abs(d) <= DoubleConsts.MAX_VALUE;
        }
    
        private final double value;
    
    
        public Double(double value) {
            this.value = value;
        }
    
    
        public Double(String s) throws NumberFormatException {
            value = parseDouble(s);
        }
    
    
        public boolean isNaN() {
            return isNaN(value);
        }
    
        public boolean isInfinite() {
            return isInfinite(value);
        }
    
    
    • 首先这个Double类类是使用final关键字修饰表示不可继承,然后所有成员变量都是使用final修饰表示引用不可变,再其次就是不提供setter方法,即满足不可变原则。
  • 您还可以看一下 汪翠老师的java项目实战之欢乐斗地主游戏开发教程 毕业项目课程设计带源码课程中的 给扑克牌绑定鼠标事件实现单击可以选择出牌列表小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    问题解答:

    对于计算比值的程序,可以使用以下步骤来实现:

    1. 定义一个类,例如RatioCalculator,其中包含一个方法calculateRatio,用于计算比值。在该方法中,传入两个参数numerator和denominator,分别表示分子和分母。
    public class RatioCalculator {
        public double calculateRatio(double numerator, double denominator) {
            // 计算比值并返回结果
            if (denominator != 0) {
                return numerator / denominator;
            } else {
                // 处理分母为0的情况,可以返回一个特定的值,比如Double.POSITIVE_INFINITY表示正无穷大
                return Double.POSITIVE_INFINITY;
            }
        }
    }
    
    1. 在主函数中实例化RatioCalculator类,并调用calculateRatio方法进行比值计算。
    public static void main(String[] args) {
        // 实例化RatioCalculator类
        RatioCalculator calculator = new RatioCalculator();
    
        // 传入分子和分母进行比值计算
        double numerator = 20.0;
        double denominator = 10.0;
        double ratio = calculator.calculateRatio(numerator, denominator);
    
        // 输出比值结果
        System.out.println("比值为: " + ratio);
    }
    

    以上是一个简单的计算比值的程序,通过定义一个RatioCalculator类,将计算比值的逻辑封装在calculateRatio方法中,然后在主函数中实例化该类,并传入分子和分母进行比值计算,最后输出结果。代码中也考虑了分母为0的情况,返回了一个特定的值表示正无穷大。

    希望这个解决方案对你有所帮助,如果有任何问题,请随时向我提问。