java语言程序设计 第十三章 (13.13、13.14、13.15、13.16)

来源:互联网 发布:淘宝网上如何找货源 编辑:程序博客网 时间:2024/06/12 00:51

程序小白,希望和大家多交流,共同学习
这里写图片描述

import java.util.ArrayList;import java.util.Collections;public class Course{    private String courseName;    private ArrayList<String> students = new ArrayList<>();    public Course()    {    }    public Course(String courseName)    {        this.courseName = courseName;    }    public void addStudents(String student)    {        if (students.size() >= 100)        {            System.out.println("It is full.");            return;        }        else            students.add(student);    }    public ArrayList<String> getStudents()    {        return students;    }    public int getNumberOfStudents()    {        return students.size();    }    public String getCourseName()    {        return courseName;    }    public void dropStudents(String student)    {        students.remove(students.get(students.indexOf(student)));    }    private void setStudents(ArrayList<String> students)    {        this.students = students;    }    @Override    public Object clone()    {        Course newCourse = new Course(getCourseName());        newCourse.setStudents(getStudents());        return newCourse;//      try//      {//          return super.clone();//      }//      catch (CloneNotSupportedException ex)//      {//          return null;//      }    }}
import java.util.ArrayList;public class TestCourse{    public static void main(String [] args)    {        Course course1 = new Course("English");        course1.addStudents("wang");        course1.addStudents("chun");        course1.addStudents("lei");        System.out.println(course1.getNumberOfStudents());        Course course2 = (Course)(course1.clone());         System.out.println(course2.getNumberOfStudents());        System.out.println(course1.equals(course2));        for (String name : course2.getStudents())        {            System.out.print(name + " ");        }        System.out.println();    }}

这里写图片描述

public class RationalArrays    extends Number implements Comparable<NormalRational>{    private long[] r = new long[2];    public RationalArrays()    {        this(0, 1);    }    public RationalArrays(long numerator, long denominator)    {        long gcd = gcd(numerator, denominator);        this.r[0] = ((denominator > 0) ? 1 : -1) * numerator / gcd;        this.r[1] = Math.abs(denominator) / gcd;    }    public static long gcd(long n, long d)    {        long n1 = Math.abs(n);        long n2 = Math.abs(d);        int gcd = 1;        for (int k = 1; k <= n1 && k <= n2; k++)        {            if (n1 % k == 0 && n2 % k == 0)            {                gcd = k;            }        }        return gcd;    }    public long getNumerator()    {        return r[0];    }    public long getDenominator()    {        return r[1];    }    public NormalRational add(NormalRational secondRational)    {        long n = r[0] * secondRational.getDenominator() + r[1] * secondRational.getNumerator();        long d = r[1] * secondRational.getDenominator();        return new NormalRational(n, d);    }    public NormalRational subtract(NormalRational secondRational)    {        long n =  r[0] * secondRational.getDenominator() - r[1] * secondRational.getNumerator();        long d = r[1] * secondRational.getDenominator();        return new NormalRational(n, d);    }    public NormalRational multiply(NormalRational secondRational)    {        long n = r[0] * secondRational.getNumerator();         long d = r[1] * secondRational.getDenominator();        return new NormalRational(n, d);    }    public NormalRational divide(NormalRational secondRational)    {        long n =  r[0] * secondRational.getDenominator();        long d = r[1] * secondRational.getNumerator();        return new NormalRational(n, d);    }    @Override    public String toString()    {        if (r[1] == 1 || r[0] == 0)        {            return r[0] + "";        }        else            return r[0] + "/" + r[1];    }    @Override    public boolean equals(Object other)    {        if ((this.subtract((NormalRational)(other))).getNumerator() == 0)        {            return true;        }        else            return false;    }    @Override    public int intValue()    {        return (int)doubleValue();    }    @Override    public float floatValue()    {        return (float)doubleValue();    }    @Override    public double doubleValue()    {        return r[0] * 1.0 / r[1];    }    @Override    public long longValue()    {        return (long)doubleValue();    }    @Override    public int compareTo(NormalRational o)    {        if (this.subtract(o).getNumerator() > 0)        {            return 1;        }        else if (this.subtract(o).getNumerator() < 0)        {            return -1;        }        else            return 0;    }}

这里写图片描述

import java.math.BigInteger;import java.math.BigDecimal;public class Rational     extends Number implements Comparable<Rational>{    private BigInteger numerator = new BigInteger("0");    private BigInteger denominator = new BigInteger("1");    public Rational()    {        this(new BigInteger("0"), new BigInteger("1"));    }    public Rational (BigInteger numerator, BigInteger denominator)    {        //System.out.println(numerator.toString() + " " + denominator.toString());        BigInteger gcd = gcd(numerator, denominator);        if (denominator.compareTo(new BigInteger("0")) > 0)        {            this.numerator = numerator.divide(gcd);        }        else            this.numerator = numerator.multiply(new BigInteger("-1")).divide(gcd);        this.denominator = denominator.abs().divide(gcd);        //System.out.println(this.numerator.toString() + " " + this.denominator.toString());    }    private static BigInteger gcd (BigInteger n, BigInteger d)    {        BigInteger n1 = n.abs();        BigInteger n2 = d.abs();        BigInteger gcd = new BigInteger("1");        BigInteger k2 = new BigInteger("1");        for (int k = 1; k <= n1.intValue() && k <= n2.intValue(); k++)        {            if ((n1.remainder(k2).equals(new BigInteger("0"))) &&                 (n2.remainder(k2).equals(new BigInteger("0"))))            {                gcd = k2;            }            k2 = k2.add(new BigInteger("1"));            //System.out.println(k2.toString() + " " + n1.toString() + " " + n2.toString());        }        return gcd;    }    public BigInteger getNumerator()    {        return numerator;    }    public BigInteger getDenominator()    {        return denominator;    }    public Rational add(Rational secondRational)    {        BigInteger n = numerator.multiply(secondRational.getDenominator()).add(denominator.multiply(secondRational.getNumerator()));        BigInteger d = denominator.multiply(secondRational.getDenominator());        return new Rational(n, d);    }    public Rational subtract(Rational secondRational)    {        BigInteger n = numerator.multiply(secondRational.getDenominator()).subtract(denominator.multiply(secondRational.getNumerator()));        BigInteger d = denominator.multiply(secondRational.getDenominator());        return new Rational(n, d);    }    public Rational multiply(Rational secondRational)    {        BigInteger n = numerator.multiply(secondRational.getNumerator());        BigInteger d = denominator.multiply(secondRational.getDenominator());        //System.out.println(numerator.toString() + " " + denominator.toString());        return new Rational(n, d);    }    public Rational divide(Rational secondRational)    {        BigInteger n = numerator.multiply(secondRational.getDenominator());        BigInteger d = denominator.multiply(secondRational.getNumerator());        return new Rational(n, d);    }    @Override    public String toString()    {        if (denominator.equals(new BigInteger("1")) || numerator.equals(new BigInteger("0")))        {            return numerator.toString();        }        else             return numerator.toString() + "/" + denominator.toString();    }    @Override    public boolean equals(Object other)    {        if (this.subtract((Rational)other).getNumerator().equals(new BigInteger("0")))        {            return true;        }        else            return false;    }    @Override    public int intValue()    {        return (int)doubleValue();    }    @Override    public float floatValue()    {        return (float)doubleValue();    }    @Override    public double doubleValue()    {        return numerator.divide(denominator).doubleValue();    }    @Override    public long longValue()    {        return (long)doubleValue();    }    @Override    public int compareTo(Rational o)    {        if (this.subtract(o).getNumerator().compareTo(new BigInteger("0")) > 0)        {            return 1;        }        else if (this.subtract(o).getNumerator().compareTo(new BigInteger("0")) < 0)        {            return -1;        }        else            return 0;    }}

这里写图片描述

import java.math.BigInteger;public class RationalCalculator{    public static void main(String [] args)    {        String[] message = args[0].split("[/ ]");//      for (String every : message)//      {//          System.out.println(every);//      }        if (message.length == 5)        {            calculator(message);        }        else if (message.length == 6)        {            String[] newMessage = {message[0], message[1], "/", message[4], message[5]};            calculator(newMessage);        }    }    public static void calculator(String[] message)    {        BigInteger numerator1 = new BigInteger(message[0]);        BigInteger denominator1 = new BigInteger(message[1]);        Rational rational1 = new Rational(numerator1, denominator1);        BigInteger numerator2 = new BigInteger(message[3]);        BigInteger denominator2 = new BigInteger(message[4]);        Rational rational2 = new Rational(numerator2, denominator2);        System.out.print(message[0] + "/" + message[1] + " " + message[2] +             " " + message[3] + "/" + message[4] + " = ");        switch (message[2].charAt(0))        {        case '+':            System.out.println(rational1.add(rational2).toString());        break;        case '-':            System.out.println(rational1.subtract(rational2).toString());        break;        case '*':            System.out.println(rational1.multiply(rational2).toString());        break;        case '/':            System.out.println(rational1.divide(rational2).toString());        }    }}
原创粉丝点击