六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 28|回复: 0

二分查找算法——Java版

[复制链接]

升级  70.67%

40

主题

40

主题

40

主题

秀才

Rank: 2

积分
156
 楼主| 发表于 2013-2-4 20:23:52 | 显示全部楼层 |阅读模式
这是将网上的C++版的改写成Java的
理论上把函数f()改一下就可以计算任意方程的0点。
仅供参考,可以将其写成递归的。
 
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class ErFenFa {static int m;static double x1, x2, x3;public static double f(double x) {double y;y = x * x * x - x - 1;return y;}public static void main(String[] args) throws NumberFormatException,IOException {double a, b;System.out.println("please input two number a,b");BufferedReader br = new BufferedReader(new InputStreamReader(System.in));a = Double.valueOf(br.readLine());b = Double.valueOf(br.readLine());double x1 = a;double x2 = b;double x3;for (int i = 1;; i++) {if (f(x1) == 0) {m = (int) (x1 * 100);x1 = m / 100;System.out.println("方程的根是x=" + x1 + ",迭代次数=" + i);}if (f(x2) == 0) {m = (int) (x2 * 100);x2 = m / 100;System.out.println("方程的根是x=" + x2 + ",迭代次数=" + i);}if (f(x1) * f(x2) > 0) {System.out.println("方程无解!" + ",迭代次数=" + i);return;} else if (f(x1) * f(x2) < 0) {x3 = (x1 + x2) / 2; // return 1;if (f(x3) == 0) {m = (int) (x3 * 100);x3 = m / 100;System.out.println("方程的根是x=" + x3 + ",迭代次数=" + i);}if (f(x3) * f(x1) < 0) {x2 = x3;if (Math.abs(x1 - x3) < 0.00001) {m = (int) (x2 * 100);x2 = m / 100;System.out.println("方程的根是x=" + x2 + ",迭代次数=" + i);break;}}if (f(x3) * f(x2) < 0) {x1 = x3;// f(x3)*f(x2)if (Math.abs(x2 - x3) < 0.00001) {m = (int) (x1 * 100);x1 = m / 100;System.out.println("方程的根是x=" + x1 + ",迭代次数=" + i);break;}}}}}} 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表