Java基础算法题(39):编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n(利用指针函数) 。

查看所有50道基础算法题请看:

Java的50道基础算法题

package Demo39Pointer_Function;
//首先定义一个接口
@FunctionalInterface
public interface Sums{
    public double sum(int n);
}
package Demo39Pointer_Function;
// 定义一个类,包含两个方法,分别计算n为奇数和偶数的情况
public class Sum_Do {
    public double Sum_odds(int n){
        double i = 1;
        double sum = 0;
        while (i<=n){
            sum = sum + 1/(2*i-1);
            i++;
        }
        return sum;
    }
    public double Sum_Even(int n){
        double i = 1;
        double sum = 0;
        while(i<=n){
            sum = sum + 1/(2*i);
            i++;
        }
        return sum;
    }
}
package Demo39Pointer_Function;
// 定义一个接口的实现类,计算奇数情况
public class Sum_odds implements Sums {
    @Override
    public double sum(int n) {
        return new Sum_Do().Sum_odds(n);
    }
}
package Demo39Pointer_Function;
//定义一个接口实现类,计算偶数情况
public class Sum_Even implements Sums {
    @Override
    public double sum(int n) {
        return new Sum_Do().Sum_Even(n);
    }
}
package Demo39Pointer_Function;
//定义测试类,获取用户输入,计算结果并打印
import java.util.Scanner;
/**
 * 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n(利用指针函数) 。
 */
/*
分析:哎呦,我都没学过什么是指针函数,怎么分析嘛,网上搜了些东西看了半天,稀里糊涂的,就这么做吧,以后搞懂了,再来完善。
 */
public class Pointer_Function {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入数字n:  ");
        int n = sc.nextInt();
        Sum_Do sd = new Sum_Do();
        double sum =0;
        if(n % 2 !=0){
            sum = new Sum_odds().sum(n);
        }else{
            sum = new Sum_Even().sum(n);
        }
        System.out.println("最终的计算结果是:");
        System.out.println(sum);
    }
}

之前呢,也没有学过函数指针的相关知识,今天在网上找了很多前辈的博客,也看不太懂,有些抽象,不过好像是说Java没有指针函数,只能通过接口的引用来实现类似的功能,这个知识点留待以后学习吧,现在可能还理解不了,如果有大佬愿意,在评论区指点小弟一二吧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉拌糖醋鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值