Java语言程序设计(习题)

(将Geometricobject类变成可比较的)修改Geometricobject类以实现Comparable接口,并且在Geometricobject类中定义一个静态的求两个Geometricobject对象中较大者的max方法。画出UML图并实现这个新的Geometricobject类。编写一个测试程序,使用max方法求两个圆中的较大者和两个矩形中的较大者。

 package Geometricobject;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Geometricobject<Geometricobject> implements Comparable<Geometricobject> {
	public class GeometricobjectCom{
		private String color;
		private boolean filled;
		private Date dateCreated = new Date();
		public GeometricobjectCom() {
		}
		public GeometricobjectCom(String color, boolean filled) {
			this.color = color;
			this.filled = filled;
		}
		public void setColor(String color) {
			this.color = color;
		}
		public String getColor() {
			return this.color;
		}
		public void setFilled(boolean filled) {
			this.filled = filled;
		}
		public boolean isFilled() {
			return filled;
		}
		public Date getDateCreated() {
			return this.dateCreated;
		}
		public void setDateCreated(Date dateCreated) {
			this.dateCreated = dateCreated;
		}
		public String toString() {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			String date = sdf.format(dateCreated);
			String boo;
			if (isFilled() == true) {
				boo = "该几何体的颜色已经填充,该颜色是"+ getColor();
			}else {
				boo = "该几何体的颜色还未填充";
			}
			return boo+"。该几何体的创建日期是:"+date;
		}	
	}

	public static Comparable Max(Comparable object1, Comparable object2) {
		if(object1.compareTo(object2) > 0) 
			return object1;
		else
			return object2;
	}
	@Override
	public int compareTo(Geometricobject o) {
		// TODO Auto-generated method stub
		return 0;
	}
}
package Geometricobject;

import java.util.Date;


public class Circle1 extends Geometricobject{
	
	private double radius = 0;
	private String name;
	
	public Circle1() {
		
	}
	public Circle1(String name,double radius) {
		this.name = name;
		this.radius = radius;
	}
	
	public double getRadius() {
		return radius;
	}
	public void setRadius(double radius) {
		this.radius = radius;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	public double getPerimeter() {
		return Math.PI*2*radius;
	}
	
	public double getArea() {
		double a = Math.pow(radius,2);
		return Math.PI*a;
	}
	
	public int compareTo(Geometricobject o) {
		if(getArea()> ((Circle1) o).getArea()) {
			return 1;
		}else if(getArea() < ((Circle1) o ).getArea()) {
			return -1;
		}else 
			return 0;
	}
}
package Geometricobject;

public class HomeworkComparable {
	public static void main(String[] args) {
		Circle1 circle1 = new Circle1("circle1" , 4);
		Circle1 circle2 = new Circle1("circle2",10);
		Circle1 circle = (Circle1) Geometricobject.Max(circle1, circle2);
		System.out.println("The max circle is " +circle.getName());
		System.out.println("The max circle's radius is " +circle.getRadius());
	}

}

2.13 (统计一个文件中的字符数、 单词数和行数)编写一个程序,统计一个文件中的字符数、单词数以及行数。单词由空格符分隔,文件名应该作为命令行参数被传递,如图12-13所示。

package statistics;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class statistics {
	public static void main(String[] args) throws Exception {
		
		//File file = new File("C:\\Users\\张瘦瘦\\Desktop\\代码\\Java第二次作业\\src\\statistics\\GeometricObject.java");
		//File file1 = new File("C:\\Users\\张瘦瘦\\Desktop\\代码\\Java第二次作业\\src\\statistics\\Rational.java");
		Scanner input = new Scanner(System.in);
		System.out.println("请输入你要扫描数据的文件地址");
		String s = input.next();
		File file = new File(s);
		
		if(!file.exists()) {
			System.out.print("文件不存在");
			System.exit(0);
		}
	
		Scanner Input1 = new Scanner(file);
		Scanner Input2 = new Scanner(file);
		sumWordChar(Input1);
		sumLine(Input2);
	}
	
	public static void sumWordChar(Scanner input) {
		int sumWord = 1;
		int sumChar = 1;
		String s = input.next();
		while(input.hasNext()) {
			sumWord ++;
			sumChar += s.length();
			s = input.next();
		}
		System.out.println("该文件的单词数是:"+sumWord);
		System.out.println("该文件的字符数是:"+sumChar);
		
	}
	
	public static void sumLine(Scanner input) {
		int sumLine = 0;
		while(input.hasNextLine()) {
			sumLine++;
			input.nextLine();
		}
		System.out.println("该文件的行数是:"+sumLine);
	}	
}
package statistics;

// Rational.java: Define a rational number and its associated
// operations such as add, subtract, multiply, and divide
public class Rational extends Number implements Comparable<Rational> {
  // Data fields for numerator and denominator
  private long numerator = 0;
  private long denominator = 1;

  /** Default constructor */
  public Rational() {
    this(0, 1);
  }

  /** Construct a rational with specified numerator and denominator */
  public Rational(long numerator, long denominator) {
    long gcd = gcd(numerator, denominator);
    this.numerator = ((denominator > 0) ? 1 : -1) * numerator / gcd;
    this.denominator = Math.abs(denominator) / gcd;
  }

  /** Find GCD of two numbers */
  private long gcd(long n, long d) {
    long t1 = Math.abs(n);
    long t2 = Math.abs(d);
    long remainder = t1 % t2;

    while (remainder != 0) {
      t1 = t2;
      t2 = remainder;
      remainder = t1%t2;
    }

    return t2;
  }

  /** Return numerator */
  public long getNumerator() {
    return numerator;
  }

  /** Return denominator */
  public long getDenominator() {
    return denominator;
  }

  /** Add a rational number to this rational */
  public Rational add(Rational secondRational) {
    long n = numerator * secondRational.getDenominator() +
      denominator * secondRational.getNumerator();
    long d = denominator * secondRational.getDenominator();
    return new Rational(n, d);
  }

  /** Subtract a rational number from this rational */
  public Rational subtract(Rational secondRational) {
    long n = numerator * secondRational.getDenominator()
      - denominator * secondRational.getNumerator();
    long d = denominator * secondRational.getDenominator();
    return new Rational(n, d);
  }

  /** Multiply a rational number to this rational */
  public Rational multiply(Rational secondRational) {
    long n = numerator * secondRational.getNumerator();
    long d = denominator * secondRational.getDenominator();
    return new Rational(n, d);
  }

  /** Divide a rational number from this rational */
  public Rational divide(Rational secondRational) {
    long n = numerator * secondRational.getDenominator();
    long d = denominator * secondRational.numerator;
    return new Rational(n, d);
  }

  @Override
  public String toString() {
    if (denominator == 1)
      return numerator + "";
    else
      return numerator + "/" + denominator;
  }

  /** Override the equals method in the Object class */
  public boolean equals(Object parm1) {
    if ((this.subtract((Rational)(parm1))).getNumerator() == 0)
      return true;
    else
      return false;
  }

  /** Override the hashCode method in the Object class */
  public int hashCode() {
    return new Double(this.doubleValue()).hashCode();
  }

  /** Override the abstract intValue method in java.lang.Number */
  public int intValue() {
    return (int)doubleValue();
  }

  /** Override the abstract floatValue method in java.lang.Number */
  public float floatValue() {
    return (float)doubleValue();
  }

  /** Override the doubleValue method in java.lang.Number */
  public double doubleValue() {
    return numerator * 1.0 / denominator;
  }

  /** Override the abstract longValue method in java.lang.Number */
  public long longValue() {
    return (long)doubleValue();
  }

  @Override
  public int compareTo(Rational o) {
    if ((this.subtract((Rational)o)).getNumerator() > 0)
      return 1;
    else if ((this.subtract((Rational)o)).getNumerator() < 0)
      return -1;
    else
      return 0;
  }
}
package statistics; // GeometricObject.java: The abstract GeometricObject class
public abstract class GeometricObject {
  private String color = "white";
  private boolean filled;

  /**Default construct*/
  protected GeometricObject() {
  }

  /**Construct a geometric object*/
  protected GeometricObject(String color, boolean filled) {
    this.color = color;
    this.filled = filled;
  }

  /**Getter method for color*/
  public String getColor() {
    return color;
  }

  /**Setter method for color*/
  public void setColor(String color) {
    this.color = color;
  }

  /**Getter method for filled. Since filled is boolean,
     so, the get method name is isFilled*/
  public boolean isFilled() {
    return filled;
  }

  /**Setter method for filled*/
  public void setFilled(boolean filled) {
    this.filled = filled;
  }
  /**Abstract method findArea*/
  public abstract double getArea();
  
  /**Abstract method getPerimeter*/
  public abstract double getPerimeter();
}

12.5 (IllegalTriangleException异常)编程练习题11.1定义了带三条边的Triangle类。

  • 在三角形中,任意两边之和总大于第三边,三角形类Triangle必须遵从这一规则。
  • 创建一个IllegalTriang1eException类,然后修改Triangle类的构造方法,
  • 如果创建的三角形的边违反了这一规则,抛出一个IllegalTriangleException对象,如下所示:
    //Construct a triangle with the specified sides
    public Triangle(double side1, double side2, double side3)
    throws IllegalTriangleException {
    // Implement it
    }
package IllegalTriangleException异常;
public class Triangle {
	
	private double side1;
	private double side2;
	private double side3;
	
	public Triangle() {
		
	}
	
	public Triangle(double side1,double side2, double side3) throws IllegalTriangleException{
		if(side1+side2<side3 || side1+side3<side2 || side2+side3 < side1) {
			throw new IllegalTriangleException("在三角形中,任意两边之和总大于第三边");
		}
		System.out.print("能构成三角形");
	}

	public double getSide1() {
		return side1;
	}

	public void setSide1(double side1) {
		this.side1 = side1;
	}

	public double getSide2() {
		return side2;
	}

	public void setSide2(double side2) {
		this.side2 = side2;
	}

	public double getSide3() {
		return side3;
	}

	public void setSide3(double side3) {
		this.side3 = side3;
	}
}
package IllegalTriangleException异常;
public class IllegalTriangleException extends Exception{
	
	public IllegalTriangleException(){
		super();
	}
	
	public IllegalTriangleException(String message) {
		super(message);
	}
}
package IllegalTriangleException异常;
public class HomeworkIllegalTriangleException {
	//throws用法
	//public static void main(String[] args) throws IllegalTriangleException{
		//Triangle t = new Triangle(2,3,4);
	//}
//try-catch用法:
   public static void main(String[] args){
		try{
			Triangle t = new Triangle(2,3,6);
		}catch(IllegalTriangleException ite){
			System.out.print("异常信息为:"+ite.getMessage());
		}			
   }
}
  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值