java 第一次作业 有理数类的设计

有理数类代码:

//有理数类Countchange
import java.text.DecimalFormat;
 
public class Countchange {
    private Double a;
    private Double b;
    private DecimalFormat Count;
 
    public Countchange(Double a, Double b) {
        this.a = a;
        this.b = b;
        Count = new DecimalFormat("###.##");//格式化数字,使输出结果为"###.#"的格式。
    }
 
    public Double add() {//相加
        Double result = a + b;
        return format(result);
    }
 
    public Double sub() {//相减
        Double result = a - b;
        return format(result);
    }
 
    public Double mult() {//相乘
        Double result = a * b;
        return format(result);
    }
 
    public Double div() {//相除
        Double result = a / b;
        return format(result);
    }
 
    private Double format(Double result) {
        return Double.parseDouble(Count.format(result));
    }
}

测试代码:

//测试代码1(给定值)
public class Main {
   public static void main(String[] args) {
   	Countchange r = new Countchange(12.0, 4.0);
       System.out.println("相加:"+r.add());
       System.out.println("相减:"+r.sub());
       System.out.println("相乘:"+r.mult());
       System.out.println("相除:"+r.div());
   }
}
@Override
  public int intValue() {
      // TODO Auto-generated method stub
       return (int)doubleValue();
    }

   @Override
   public long longValue() {
        // TODO Auto-generated method stub
       return (long)doubleValue();
    }

    @Override
   public float floatValue() {
        // TODO Auto-generated method stub
       return (float)doubleValue();
    }

    @Override
    public double doubleValue() {
        // TODO Auto-generated method stub
       return numerator*1.0/denominator;
   }


测试结果1:

测试代码2(输入值)

//测试代码2
import java.util.Scanner;

public class Mainchange {
   public static void main(String[] args) {
   	Scanner cs=new Scanner(System.in);
   	while(cs.hasNext()){
   		double a1=cs.nextDouble();
   		double a2=cs.nextDouble();
   		Countchange r = new Countchange(a1, a2);
           System.out.println("相加:"+r.add());
           System.out.println("相减:"+r.sub());
           System.out.println("相乘:"+r.mult());
           System.out.println("相除:"+r.div());
   	}
   	
   }
}

测试结果2:

讨论问题:

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

因为如果如果设计的使c语言的有理数代码,那么设计时更偏向过程,要用怎样的函数来实现这个过程。而在设计类时,则是根据更考虑本身的特性与目标,也就是面向对象来编写功能性代码。
在java设计的类中,是根据有理数的特性设计出其方法,是依托于有理数这一类的对象,所有的对象都具有相同的属性方法,且可随时抽取其中的属性和方法进行编程。

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

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

别人可以直接导入我的类,因为我使用的是pubilc进行修饰,在另一个类中可以直接调用。

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

是的,当我的有理数属性修改时,并不会影响到他人的调用,因为我的有理数是private,当我的有理数的属性修改时不会影响他人调用我的类。

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

:合适,这样可以方便代码复用。因为这样可以避免他人调用我的类时因为有理数属性的修改而无法完成调用。

posted @ 2020-10-03 21:22  MIKELOVE  阅读(217)  评论(0编辑  收藏  举报