Java期末冲刺复习(上)

一、类与对象

  1. 题目要求:
    使用this调用已有的有参构造函数,width与length分别为5和6。
    为Rectangle类覆盖toString。按照width=实际宽度值,length=实际长度值的格式输出
public Rectangle(){
	this(5,6);
}
public Rectangle(int width, int length) {
    this.width = width;
    this.length = length;
}
public String toString(){
     return "width=" + width + ",length=" + length;
} 
  1. 设计一个矩形类Rectangle (20分)
    设计一个名为Rectangle的类表示矩形。这个类包括: 两个名为width和height的double型数据域,它们分别表示矩形的宽和高。width和height的默认值都为1. 一个无参构造方法。 一个为width和height指定值的矩形构造方法。 一个名为getArea()的方法返回这个矩形的面积。 一个名为getPerimeter()的方法返回这个矩形的周长。
import java.util.Scanner;
/* 你的代码将被嵌入到这里 */

public class Main {
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    double w = input.nextDouble();
    double h = input.nextDouble();
    Rectangle myRectangle = new Rectangle(w, h);
    System.out.println(myRectangle.getArea());
    System.out.println(myRectangle.getPerimeter());

    input.close();
  }
}

在这里插入图片描述

class Rectangle{
	double width = 1,height = 1;
	public Rectangle() {}
	public Rectangle(double width,double height) {
		this.width = width;
		this.height = height;
	}
	public double getArea() {
		return width*height;
	}
	public double getPerimeter() {
		return (width+height)*2;
	}
}
  1. Book类的设计 (20分)
    阅读测试程序,设计一个Book类。
    在这里插入图片描述
    裁判测试程序样例:

import java.util.*;
public class Main {
    public static void main(String[] args) {
        List <Book>books=new ArrayList<Book>();
        Scanner in=new Scanner(System.in);
        for(int i=0;i<5;i++)
        {    String str=in.nextLine();
            String []data=str.split(",");
            Book book=new Book(data[0],Integer.parseInt(data[1]),data[2],Integer.parseInt(data[3]));
            books.add(book);
        }

        System.out.println(totalprice(books));    
    }

    /*计算所有book的总价*/
    public static int totalprice(List <Book>books) 
    {  int result=0;
        for(int i=0;i<books.size();i++){result+=books.get(i).getPrice();}
        return result;
    }
}
/* 请在这里填写答案 */

在这里插入图片描述

class Book{
	private String name,author;
	private int price,date;
	public String getName() {
		return name;
	}
	public String getAuthor() {
		return author;
	}
	public int getDate() {
		return date;
	}
	public int getPrice() {
		return price;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public void setDate(int date) {
		this.date = date;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	public Book(String name,  int price,String author, int date) {
		this.name = name;
		this.author = author;
		this.date = date;
		this.price = price;
	}
	
}
  1. 重写父类方法equals (20分)
    在类Student中重写Object类的equals方法。使Student对象学号(id)相同时判定为同一对象。
    在这里插入图片描述
    裁判测试程序样例:
import java.util.Scanner;
class Student {
     int id;
     String name;
     int age;
     public Student(int id,     String name,     int age) {
         this.id = id;
         this.name = name;
         this.age = age;
     }

     /* 请在这里填写答案 */

}
public class Main {
    public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
        Student s1 = new Student(sc.nextInt(),sc.next(),sc.nextInt());
        Student s2 = new Student(sc.nextInt(),sc.next(),sc.nextInt());
        System.out.println(s1.equals(s2));
        sc.close();
    }
}

在这里插入图片描述

@Override
    public boolean equals(Object obj) {
    	 Student std = (Student) obj;
    	if(this.id == std.id) {
    		return true;
    	}else
    		return false;
    }
  1. 设计一个BankAccount类 (20分)
    设计一个BankAccount类,这个类包括:
    (1)一个int型的balance表时账户余额。
    (2)一个无参构造方法,将账户余额初始化为0。
    (3)一个带一个参数的构造方法,将账户余额初始化为该输入的参数。
    (4)一个getBlance()方法,返回账户余额。
    (5)一个withdraw()方法:带一个amount参数,并从账户余额中提取amount指定的款额。
    (6)一个deposit()方法:带一个amount参数,并将amount指定的款额存储到该银行账户上。
    设计一个Main类进行测试,分别输入账户余额、提取额度以及存款额度,并分别输出账户余额。
    在这里插入图片描述
import java.io.ObjectInputStream.GetField;
import java.util.Scanner;

class BankAccount{
	int balance;

	public int getBalance() {
		return balance;
	}

	public BankAccount() {
		this.balance = 0;
	}

	public BankAccount(int balance) {
		this.balance = balance;
	}
	
	public int withdraw(int amount) {
		return balance-=amount;
	}
	
	public int deposit(int amount) {
		return balance+=amount;
	}
}

public class Main{
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		int balance,amount1,amount2;
		balance = input.nextInt();
		int balance1 = balance;
		amount1 = input.nextInt();
		amount2 = input.nextInt();
		BankAccount bankAccount = new BankAccount(balance);
		int result1 = bankAccount.withdraw(amount1);
		int result2 = bankAccount.deposit(amount2);
		System.out.println(balance1 + "\n" + result1 + "\n" + result2);
	}
}

二、继承与多态

  1. 根据派生类写出基类(Java) (10分)
    裁判测试程序样例中展示的是一段定义基类People、派生类Student以及测试两个类的相关Java代码,其中缺失了部分代码,请补充完整,以保证测试程序正常运行。
    在这里插入图片描述
    裁判测试程序样例:
    注意:真正的测试程序中使用的数据可能与样例测试程序中不同,但仅按照样例中的格式调用相关方法(函数)。
class People{
    protected String id;
    protected String name;

    /** 你提交的代码将被嵌在这里(替换此行) **/

}

class Student extends People{
    protected String sid;
    protected int score;
    public Student() {
        name = "Pintia Student";
    }
    public Student(String id, String name, String sid, int score) {
        super(id, name);
        this.sid = sid;
        this.score = score;
    }
    public void say() {
        System.out.println("I'm a student. My name is " + this.name + ".");
    }

}
public class Main {
    public static void main(String[] args) {
        Student zs = new Student();
        zs.setId("370211X");
        zs.setName("Zhang San");
        zs.say();
        System.out.println(zs.getId() + " , " + zs.getName());

        Student ls = new Student("330106","Li Si","20183001007",98);
        ls.say();
        System.out.println(ls.getId() + " : " + ls.getName());

        People ww = new Student();
        ww.setName("Wang Wu");
        ww.say();

        People zl = new People("370202", "Zhao Liu");
        zl.say();
    }
}

在这里插入图片描述

 public People(String id,String name) {
		this.id = id;
		this.name = name;
	}
    public People() {
    }
	public String getId() {
		return id;
	}
	public String getName() {
		return name;
	}
	public void setId(String id) {
		this.id = id;
	}
	public void setName(String name) {
		this.name = name;
	}
    public void say() {
    	System.out.println("I'm a person! My name is " + getName() + ".");
    }
  1. 从抽象类shape类扩展出一个圆形类Circle (10分)
    请从下列的抽象类shape类扩展出一个圆形类Circle,这个类圆形的半径radius作为私有成员,类中应包含初始化半径的构造方法。
    裁判测试程序样例:
import java.util.Scanner;
import java.text.DecimalFormat;

abstract class shape {// 抽象类
     /* 抽象方法 求面积 */
    public abstract double getArea( );

    /* 抽象方法 求周长 */
    public abstract double getPerimeter( );
}

/* 你提交的代码将被嵌入到这里 */

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        DecimalFormat d = new DecimalFormat("#.####");// 保留4位小数
         double r = input.nextDouble( ); 
        shape c = new  Circle(r);

        System.out.println(d.format(c.getArea()));
        System.out.println(d.format(c.getPerimeter()));
        input.close();
    } 
}

在这里插入图片描述

class Circle extends shape{
	
	private double radius;
	final double PI = 3.1415926535;

	public double getRadius() {
		return radius;
	}

	public Circle(double radius) {
		this.radius = radius;
	}

	public void setRadius(double radius) {
		this.radius = radius;
	}

	@Override
	public double getArea() {
		return PI * radius * radius;
	}

	@Override
	public double getPerimeter() {
		return 2 * PI * radius;
	}
	
}
  1. 图书和音像租赁 (10分)
    图书和音像店提供出租服务,包括图书和DVD的出租。图书包括书名(String,一个词表示)和价格(double),DVD包括片名(String,一个词表示)。它们都是按天出租,但租金计算方式却不同,图书的日租金为图书价格的1%,DVD的日租金为固定的1元。构造图书和DVD类的继承体系,它们均继承自Media类,且提供方法getDailyRent()返回日租金,构造音像店类MediaShop,提供静态函数double calculateRent(Media[] medias, int days)。 在main函数中构造了Media数组,包含图书和DVD的对象,调用calculateRent方法得到并输出租金,保留小数点两位
    在这里插入图片描述
    裁判测试程序样例:
import java.util.Scanner;

public class Main {
        public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        Media[] ms  = new Media[n];
        for (int i=0; i<n; i++) {
            String type = sc.next();
            if (type.equals("book")) {
                ms[i] = new Book(sc.next(), sc.nextDouble());
            }else {
                ms[i] = new DVD(sc.next());
            }
        }
        double rent = MediaShop.calculateRent(ms, sc.nextInt());
        System.out.printf("%.2f", rent);
    }
}

/* 请在这里填写答案 */

在这里插入图片描述

class Book extends Media{
	String name;
	double price;
	Book(String name,double price) {
		this.name = name;
		this.price = price;
	}
	@Override
	public double getDailyRent() {
		return price*0.01;
	}
}
class Media{
	public double getDailyRent() {
		return 0;	
	}
}
class MediaShop{
	public static double calculateRent(Media[] medias,int days) {
		double sum = 0;
		for (int i = 0; i < medias.length; i++) {
			sum += medias[i].getDailyRent()*days;
		}
		return sum;
	}
}
class DVD extends Media{
	String name;
	public DVD(String name) {
		this.name = name;
	}
	@Override
		public double getDailyRent() {
			return 1;
		}
}
  1. 设计一个Triangle类继承自GeometricObject类 (10分)
    设计一个名为Triangle的类来扩展GeometricObject类。该类包括:
    ■ 三个名为side1、side2和side3的double数据域表示这个三角形的三条边,它们的默认值是1.0。
    ■ 一个无参构造方法创建默认的三角形。
    ■ 一个能创建带制定side1、side2和side3的三角形的构造方法。
    ■ 所有三个数据域的访问器方法。
    ■ 一个名为getArea()的方法返回这个三角形的面积。
    ■ 一个名为getPerimeter()的方法返回这个三角形的周长。
    ■ 一个名为toString()的方法返回这个三角形的字符串描述。
    toString()方法的实现如下所示:
    return “Triangle: side1 = " + side1 + " side2 = " + side2 +” side3 = " + side3;
    编写一个测试程序,提示用户输入三角形的三条边、颜色以及一个Boolean值表明该三角形是否填充。程序应该使用输入创建一个具有这些边并设置color和filled属性的三角形。程序应该显示面积、周长以及边长。
    系统会自动提交Main类和GeometricObject类。
    裁判测试程序样例:
//Main测试类
public class Main{
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        double side1 = input.nextDouble();
        double side2 = input.nextDouble();
        double side3 = input.nextDouble();

        Triangle triangle = new Triangle(side1, side2, side3);

        String color = input.next();
        triangle.setColor(color);

        boolean filled = input.nextBoolean();
        triangle.setFilled(filled);

        System.out.println("The area is " + triangle.getArea());
        System.out.println("The perimeter is "
                + triangle.getPerimeter());
        System.out.println(triangle);
    }
}

//GeometricObject类
class GeometricObject {
    private String color = "white";
    private boolean filled;
    private java.util.Date dateCreated;

    public GeometricObject() {
        dateCreated = new java.util.Date();
    }

    public GeometricObject(String color, boolean filled) {
        dateCreated = new java.util.Date();
        this.color = color;
        this.filled = filled;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public boolean isFilled() {
        return filled;
    }

    public void setFilled(boolean filled) {
        this.filled = filled;
    }

    public java.util.Date getDateCreated() {
        return dateCreated;
    }


    @Override
    public String toString() {
        return "created on " + dateCreated + "\ncolor: " + color + "and filled: " + filled;
    }

}
/* 请在这里填写答案 */

在这里插入图片描述

class Triangle extends GeometricObject{
	private double side1 = 1.0,side2 = 1.0,side3 = 1.0;

	public Triangle() {
	}

	public Triangle(double side1, double side2, double side3) {
		this.side1 = side1;
		this.side2 = side2;
		this.side3 = side3;
	}

	public double getSide1() {
		return side1;
	}

	public double getSide2() {
		return side2;
	}

	public double getSide3() {
		return side3;
	}

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

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

	public void setSide3(double side3) {
		this.side3 = side3;
	}
	
	public double getArea() {
		double p = (side1 + side2 + side3) / 2;
		return Math.sqrt(p*(p-side1)*(p-side2)*(p-side3));
		
	}
	
	public double getPerimeter() {
		return side1 + side2 + side3;
	}
	
	@Override
	public String toString() {
		return "Triangle: side1=" + side1 + " side2=" + side2 +" side3=" + side3;
	}
	
}
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值