JAVA2实用教程 第四章中的例题(六)

   这个例子是关于分数的加减乘除运算。

   先码好基本要用到的算法。

public class Rational {
	int numerator =1; //分子
	int denominator=1; //分母
	
	void setNumerator(int a) {         //设置分子
		int c=f(Math.abs(a),denominator); //计算最大公约数
		numerator=a/c;
		denominator=denominator/c;
		if(numerator<0 && denominator<0) {
			numerator = -numerator;
			denominator = -denominator;
		}
	}
	
	void setDenominator(int b) {          //设置分母
		int c=f(numerator,Math.abs(b));   //计算最大公约数
		numerator=numerator/c;
		denominator=b/c;
		if(numerator<0 && denominator<0) {
			numerator = -numerator;
			denominator = -denominator;
		}
	}
	
	int getNumerator() {
		return numerator;
	}
	
	int getDenominator() {
		return denominator;
	}
	
	int f(int a,int b) {           //求a、b的最大公约数
		if(a==0) return 1;
		if(a<b) {
			int c=a;
			a=b;
			b=c;
		}
		int r=a%b;
		while(r!=0) {        //不断求余数,直到最后余数为0,则最后一次的b就是最大公约数
			a=b;
			b=r;
			r=a%b;
		}
		return b;
	}
	
	Rational add(Rational r) {       //加法运算
		int a=r.getNumerator();     //返回有理数r的分子,此处的分子是对象r引用的分子
		int b=r.getDenominator();   //返回有理数r的分母
		int  newNumerator =numerator*b+denominator*a;//此处的numerator是原来的成员变量,计算出新分子
		int	 newDenominator =denominator*b;          //计算出新分母
		Rational result =new Rational();        //声明一个result对象,用来存放结果
		result.setNumerator(newNumerator);       //result对象中存放新的分子分母
		result.setDenominator(newDenominator);
		return result;
	}
	
	Rational sub(Rational r) {       //减法运算
		int a=r.getNumerator();     
		int b=r.getDenominator();   
		int  newNumerator =numerator*b-denominator*a;
		int	 newDenominator =denominator*b;          
		Rational result =new Rational();
		result.setNumerator(newNumerator);
		result.setDenominator(newDenominator);
		return result;
	}
	
	Rational muti(Rational r) {  //乘法运算
		int a=r.getNumerator();     
		int b=r.getDenominator();   
		int  newNumerator =numerator*a;
		int	 newDenominator =denominator*b;          
		Rational result =new Rational();
		result.setNumerator(newNumerator);
		result.setDenominator(newDenominator);
		return result;
	}
	
	Rational div(Rational r) {    //除法运算
		int a=r.getNumerator();     
		int b=r.getDenominator();   
		int  newNumerator =numerator*b;
		int	 newDenominator =denominator*a;          
		Rational result =new Rational();
		result.setNumerator(newNumerator);
		result.setDenominator(newDenominator);
		return result;
	}
}

   接着是主类的运算例子。

public class EX4_23 {
	public static void main(String[] args) {
		Rational r1=new Rational();      //创建Rational类对象r1
		r1.setNumerator(1);             //r1设置分子1
		r1.setDenominator(5);			//r1设置分母5
		Rational r2=new Rational();     
		r2.setNumerator(3);
		r2.setDenominator(2);
		
		Rational result=r1.add(r2);
		int a=result.getNumerator();
		int b=result.getDenominator();
		System.out.println("1/5+3/2="+a+"/"+b);
		
		result=r1.sub(r2);
		a=result.getNumerator();
		b=result.getDenominator();
		System.out.println("1/5-3/2="+a+"/"+b);
		
		result=r1.muti(r2);
		a=result.getNumerator();
		b=result.getDenominator();
		System.out.println("1/5×3/2="+a+"/"+b);
		
		result=r1.div(r2);
		a=result.getNumerator();
		b=result.getDenominator();
		System.out.println("1/5÷3/2="+a+"/"+b);
		
		int n=10,k=1;
		System.out.println("计算2/1+3/2+5/3+8/5+13/8+...的前"+n+"项和.");
		Rational sum=new Rational();   //用来表示求和
		sum.setNumerator(0);
		Rational item=new Rational();   //声明一个对象来表示分子分母的变换
		item.setNumerator(2);
		item.setDenominator(1);
		while(k<=n) {
			sum=sum.add(item);
			k++;
			int fenzi=item.getNumerator();
			int fenmu=item.getDenominator();
			item.setNumerator(fenzi+fenmu);
			item.setDenominator(fenzi);
		}
		a=sum.getNumerator();
		b=sum.getDenominator();
		System.out.println("用分数表示:");
		System.out.println(a+"/"+b);
		double doubleResult=(a*1.0)/b;
		System.out.println("用小数表示:");
		System.out.println(doubleResult);		
	}
}

  最后我将例题稍作修改,改成了可以自己输入想要的分数,以及可以自由的选择算法。

public class EX_23_1 {
	public static void main(String[] args) {
		Scanner in =new Scanner(System.in);
		Rational r1=new Rational();      //创建Rational类对象r1
		System.out.println("请输入第一个分数的分子、分母:");
		int i,j,p,l;
		i=in.nextInt();
		j=in.nextInt();
		System.out.println("请输入第二个分数的分子、分母:");
		p=in.nextInt();
		l=in.nextInt();
		
		r1.setNumerator(i);             
		r1.setDenominator(j);			
		Rational r2=new Rational();     
		r2.setNumerator(p);
		r2.setDenominator(l);
		
		int n;
		System.out.println("请选择需要执行的算法:1.加法   2.减法  3.乘法  4.除法");
		n=in.nextInt();
		
		while(n>0) {
		switch(n) {
		case 1:
		Rational result=r1.add(r2);
		int a=result.getNumerator();
		int b=result.getDenominator();
		System.out.println(i+"/"+j+"+"+p+"/"+l+"="+a+"/"+b);
		break;
		
		case 2:
		result=r1.sub(r2);
		a=result.getNumerator();
		b=result.getDenominator();
		System.out.println(i+"/"+j+"-"+p+"/"+l+"="+a+"/"+b);
		break;
		
		case 3:
		result=r1.muti(r2);
		a=result.getNumerator();
		b=result.getDenominator();
		System.out.println(i+"/"+j+"×"+p+"/"+l+"="+a+"/"+b);
		break;
		
		case 4:
		result=r1.div(r2);
		a=result.getNumerator();
		b=result.getDenominator();
		System.out.println(i+"/"+j+"÷"+p+"/"+l+"="+a+"/"+b);
		break;
		
		default:
			System.out.println("请输入正确的数字!");
		   }	
		System.out.println("若需要计算,输入相应的数字:");
		System.out.println("结束输入0");
		n=in.nextInt();	
		}
	}
}

  结果如图:

Java2实用教程 rar 第1章Java入门 1 1Java的诞生 1 2Java的特点 1 3安装Sun公司的SDK 1 4一个Java程序的开发过程 1 5一个简单的Java应用程序的开发过程 1 6一个简单的Java小应用程序 1 7什么是JSP 习 第2章标识符 关键字和数据类型 2 1标识符和关键字 2 2Java的基本数据类型 2 3Java的数组 习 第3章运算符 表达式和语句 3 1运算符与表达式 3 2语句概述 3 3控制语句 3 4 循环语句 3 5break和continue语句 习 第4章类 对象和接口 4 1编程语言的几个发展阶段 4 1 1机器语言 4 1 2过程语言 4 1 3面向对象编程 4 2类 4 2 1类声明 4 2 2类体 4 2 3成员变量和局部变量 4 2 4方法 4 2 5方法重载 4 2 6构造方法 4 2 7类方法和实例方法 4 2 8值得注意的问 4 3对象 4 3 1创建对象 4 3 2使用对象 4 3 3于象的引用和实体 4 3 4参数传值 4 4static关键字 4 4 1实例变量和类变量的区别 4 4 2实例方法和类方法的区别 4 5this关键字 4 6包 4 6 1包语句 4 6 2import语句 4 6 3将类打包 4 7访问权限 4 7 1私有变量和私有方法 4 7 2共有变量和共有方法 4 7 3友好变量和友好方法 4 7 4受保护的成员变量和方法 4 7 5public类与友好类 4 8类的继承 4 8 1子类 4 8 2子类的继承性 4 8 3成员变量的隐藏和方法的重写 4 8 4final关键字 4 9对象的上转型对象 4 10多态性 4 11abstract类和abstract方法 4 12super关键字 4 13接口 4 13 1接口的声明与使用 4 13 2理解接口 4 13 3接口回调 4 13 4接口做参数 4 14内部类 4 15匿名类 4 15 1和类有关的匿名类 4 15 2和接口有关的匿名类 4 16异常类 4 16 1try catch语句 4 16 2自定义异常类 4 17Class类 4 17 1获取类的有关信息 4 17 2使用Class实例化一个对象 4 18基本类型的类包装 4 18 1Double类和Float类 4 18 2Byte Integer Short 工 ong类 4 18 3Character类 4 19反编译和文档生成器 4 20JAR文件 4 20 1将应用程序压缩为JAR文件 4 20 2将类压缩成JAR文件 4 20 3更新 查看JAR文件 习 第5章字符串 5 1字符串 5 2字符串的常用方法 5 3字符串与基本数据的相互转化 5 4对象的字符串表示 5 5StringTokenizer类 5 6字符串与字符 字节数组 5 7StringBuffer类 5 8正则表达式 习 第6章时间 日期和数字 6 1Date类 6 2Calendar类 6 3Math类 6 4BigInteger类 习 第7章AWT组件及事件处理 7 1Java窗口 7 1 1 Frame常用方法 7 1 2菜单条 菜单 菜单项 7 1 3窗口与屏幕 7 2文本框 7 2 1TextField类的主要方法 7 2 2文本框上的ActionEvent事件 7 3内部类实例做监视器 7 4按钮与标签 7 4 1标签组件 7 4 2按钮组件 7 5菜单项 7 6文本区 7 6 1TextArea类主要方法 7 6 2文本区上的TextEvent事件 7 7面板 7 7 1Panel类 7 7 2ScrollPane类 7 8布局 7 8 1FlowLayout布局 7 8 2BorderLayout布局 7 8 3CardLayout布局 7 8 4GridLayout布局 7 8 5BoxLayout布局 7 8 6null布局 7 9画布 7 10选择型组件 7 10 1选择框 7 10 2下拉列表 7 10 3滚动列表 7 11Component类的常用方法 7 12窗口事件 7 13鼠标事件 7 14焦点事件 7 15键盘事件 7 16使用剪贴板 7 17打印 7 18综合实例 习 第8章建立对话框 8 1Dialog类 8 2文件对话框 8 3消息对话框 8 4确认对话框 8 5颜色对话框 习 第9章Java多线程机制 9 1Java的线程 9 2Thread类的子类创建线程 9 3使用Runnable接口 9 4线程的常用方法 9 5GUI线程 9 6线程同步 9 7在同步方法使用wait notif 和nodf3 All 方法 9 8挂起 恢复和终止线程 9 9计时器线程Timer 9 10线程联合 9 11守护线程 习 第10章输入输出流 10 1File类 10 2FileInputStream类 10 3FileOutputStream类 10 4FileReader类和FileWriter类 10 5使用文件对话框打开和保存文件 10 6RandornAccessFile类 10 7数据流 10 8数组流 10 9对象流 10 10序列化与对象克隆 10 11文件锁FileLock 10 12Process类的流 10 13带进度条的输入流 习 第11章Java网络的基本知识 11 1使用URL 11 2读取URL的资源 11 3显示URL资源的HTML文件 11 4处理超链接 11 5InetAdress类 11 6套接字 11 7网络的数据压缩与传输 11 8UDP数据报 11 9广播数据报 习 第12章JavaApplet基础 12 1JavaApplet的运行原理 12 2网页向JavaApplet传值 12 3JavaApplet扣使用URL 12 4JavaApplet建立新线程 12 5JavaApplet使用套接字 习 第13章常见数据结构的Java实现 13 1链表 13 2栈 13 3树集 13 4树映射 13 5散列集 13 6散列表 13 7向量 习 第14章图形与图像 14 1绘制文本 14 2绘制基本图形 14 3建立字体 14 4清除 14 5Java2D 14 6图形的布尔运算 14 7绘制钟表 14 8绘制图像 14 9制作JPG图像 14 10XOR绘图模式 14 11打印图形 图像 习 第15章Java数据库连接 JDBC 15 1创建数据源 15 2JDBC ODBC桥接器 l5 3顺序查询 15 4可滚动结果集 15 5排序查询 15 6模糊查询 15 7随机查询 15 8更新 添加 删除记录 l5 9预处理语句 15 10数据库访问的套接字技术 习 第16章Java与多媒体 16 1在小程序播放音频 16 2在另一个线程创建音频对象 16 3在应用程序播放音频 16 4Java媒体框架 JMF 习 第17章JavaSwing基础 17 1几个重要的类 17 2间容器 17 3各种组件 习">Java2实用教程 rar 第1章Java入门 1 1Java的诞生 1 2Java的特点 1 3安装Sun公司的SDK 1 4一个Java程序的开发过程 1 5一个简单的Java应用程序的开发过程 1 6一个简单的Java小应用程序 1 7什么是JSP 习 第2章标识符 关键字和数据类型 2 1标识 [更多]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值