• Java00-面向对象入门(有理数类的设计)


    1.有理数类的代码

    
    //凡是可以写成numerator/denominator(分子,分母为整数且分子≠0)形式的数,都是有理数
    public class Rational {
    	private long numerator;//分子
    	private long denominator;//分母
    	
    	//求最大公约数,简化有理数,方便计算
    	public static long gcd(long n,long d){
    		if(d==0)
    		{
    			return 0;
    		}
    		
    		return gcd(d,n%d);
    	}
    
    	public Rational(long n, long d) {
    		numerator=n;
    		denominator=d;
    		long Gcd=gcd(numerator,denominator);
    		
    		if(Gcd>=1)
    		{
    			numerator/=Gcd;
    			denominator/=Gcd;
    		}
    	}
    	
    	//加法
    	public Rational add(Rational num){
    		long n=numerator*num.denominator+denominator*num.numerator;
    		long d=denominator*num.denominator;
    		return new Rational(n,d);
    	}
    	
    	//减法
    	public Rational subtract(Rational num){
    		long n=numerator*num.denominator-denominator*num.numerator;
    		long d=denominator*num.denominator;
    		return new Rational(n,d);
    	}
    	
    	//乘法
    	public Rational multiply(Rational num){
    		long n=numerator*num.numerator;
    		long d=denominator*num.denominator;
    		return new Rational(n,d);
    	}
    	
    	//除法
    	public Rational divide(Rational num){
    		long n=numerator*num.denominator;
    		long d=denominator*num.numerator;
    		return new Rational(n,d);
    	}
    	
    	//转化为字符串
    	public String toString(){
    		if(denominator==1)//分母为1,直接表示分子即可
    		{
    			return "" + numerator;
    		}
    		
    		return numerator + "/" + denominator;
    	}
    }
    
    

    2.测试代码

    
    import java.util.Scanner;
    
    public class Main {
    
    	public static void main(String[] args) {
    		Scanner sc=new Scanner(System.in);
    		
    		while(sc.hasNext()) {
    			int a=sc.nextInt();
    			int b=sc.nextInt();
    			int c=sc.nextInt();
    			int d=sc.nextInt();
    			
    			Rational firstNum = new Rational(a,b);//第一个有理数
    			Rational secondNum = new Rational(c,d);//第二个有理数
    
    			Rational Add = firstNum.add(secondNum);//加法
    			Rational Subtract = firstNum.subtract(secondNum);//减法
    			Rational Multiply = firstNum.multiply(secondNum);//乘法
    			Rational Divide = firstNum.divide(secondNum);//除法
    			
    			//输出
    			System.out.println(firstNum + "+" + secondNum + "=" + Add);
    			System.out.println(firstNum + "-" + secondNum + "=" + Subtract);
    			System.out.println(firstNum + "×" + secondNum + "=" + Multiply);
    			System.out.println(firstNum + "÷" + secondNum + "=" + Divide);
    		}
    	}
    }
    
    

    3.测试结果

    4.尝试描述怎么与c语言的有理数代码相比较,为什么你设计的类更加面向对象?

    c语言和Java的部分功能是类似的,但是Java更加面向对象,C语言更面向过程。因为Java在类里把类的属性方法都写清楚了,在同一个包里的另一个class中就可以直接用。

    5.尝试从代码复用的角度来描述你设计的有理数类。从几个方面讨论。

    1)别人如何复用你的代码?

    导入包中的有理数类,如:import java.util.Rational;

    2)别人的代码是否依赖你的有理数类的属性?当你的有理数类的属性修改时,是否会影响他人调用你有理数类的代码?

    别人的代码会依赖于我的有理数类的属性;当我的有理数类的属性修改时,不会影响他人调用我的有理数类的代码,因为设置成为private类型。

    3)有理数类的public方法是否设置合适?为什么有的方法设置为private?

    合适;因为public是公有的,private是私有的,有的方法设置成private,别的类就不能通过该private方法访问该变量,只限于自己使用,这样可以防止使用者不小心对数据修改造成程序错误。

  • 相关阅读:
    php设计模式 -- 数据映射模式
    php 守护进程 (简单)
    php 守护进程
    php rabbitmq demo
    linux 全局安装composer
    linux 安装rabbitmq
    linux php安装RabbitMq扩展
    http和tcp详解
    lnmp环境脚本自动配置
    30.输入年月日,判断它是该年的第多少天
  • 原文地址:https://www.cnblogs.com/xyx129221/p/13791878.html
Copyright © 2020-2023  润新知