面向对象练习题

这几天,我整理了一些面向对象的练习题进行编程,学习内容如下:
1.声明员工类Employee,包含属性:编号、姓名、年龄、薪资;声明Test1测试类,并在main方法中,创建一个员工对象,并为属性赋值,并打印员工的信息。

public class Employee extends Object { // extends Object可以不写,等价
	private Long id;
	private String name;
	private int age;// 简单类型,默认值为0
	private double salary;

	@Override // 注解,用于告知IDE工具,这个方法是一个覆盖的方法
	public String toString() {
//		return String.format("员工%d的编号为:%d,姓名:%s,年龄:%d,薪资:%.1f", this.id, this.id, this.name, this.age, this.salary);
		return "员工"+this.id+"的编号为:"+this.id+",姓名:"+this.name+",年龄:"+this.age+",薪资:"+salary;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public double getSalary() {
		return salary;
	}

	public void setSalary(double salary) {
		this.salary = salary;
	}

}
public class Test1 {
	public static void main(String[] args) {
		Employee e1 = new Employee();
		e1.setId(1L); // L用于表示长整型
		e1.setName("王肖博"); // “”表示字符串类型
		e1.setAge(23);
		e1.setSalary(9785.83);
		System.out.println(e1);
	}
}

2.声明一个日期类MyDate,包含属性:年、月、日;声明一个Test2测试类,并在main方法中,创建一个日期对象并打印显示

public class MyDate {
	int year;
	int month;
	int date;
	@Override
	public String toString() {
		return year+"年"+month+"月"+date+"日";
	}
	public int getYear() {
		return year;
	}
	public void setYear(int year) {
		this.year = year;
	}
	public int getMonth() {
		return month;
	}
	public void setMonth(int month) {
		this.month = month;
	}
	public int getDate() {
		return date;
	}
	public void setDate(int date) {
		this.date = date;
	}
	
}
public class Test2 {
	public static void main(String[] args) {
		MyDate d1 = new MyDate();
		d1.year = 1991;  //默认范围限定词同包可见
		d1.month = 10;
		d1.date = 5;
		System.out.println(d1);
	}
}

3.进行折半查找

public class MyArrays {
	private MyArrays() {
	}
	// 可以为任意一维整型数组arr实现从小到大排序
	/*
	 * 冒泡排序: 时间复杂度 空间复杂度 稳定性
	 * 时间复杂度 O(n**2) 空间复杂度 O(1) 稳定性 true
	 * 优化算法:可能有多余的比较
	 */
	public static void sort(int[] arr) {
		for (int i = 1; i < arr.length; i++) {
			for (int k = 0; k < arr.length - i; k++) {
				if (arr[k] > arr[k + 1]) {
					int tmp = arr[k];
					arr[k] = arr[k + 1];
					arr[k + 1] = tmp;
				}
			}
		}
	}
	// 可以在任意一维整型数组arr中查找value值的下标,如果不存在返回-1
	public static int indexOf(int[] arr, int value) {
		// 折半查找的前提是有序
		sort(arr);
		return binarySearch(arr, value, 0, arr.length-1);
	}

	private static int binarySearch(int[] arr, int target, int begin, int end) {
		if (begin > end)
			return -1;
		int mid = (begin + end) / 2;
		if (arr[mid] < target) {
			begin = mid + 1;
		} else if (arr[mid] > target) {
			end = mid - 1;
		} else
			return mid;
		return binarySearch(arr, target, begin, end);
	}
	//可以实现从任意一维数组arr中复制一个新数组返回,新数组的长度为len,从arr[0]开始复制
	public static int[] copy(int[] arr, int len) {
		int[] res=new int[len];
//		for(int i=0;i
//			res[i]=arr[i];
//		}
//		return res;
		int newLen=Math.min(arr.length, len);
		System.arraycopy(arr, 0, res, 0, newLen);
		return res;
	}
}

4.声明一个常识工具类DateCommonsTools,包含五个方法

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class DateCommonsTools {
	private DateCommonsTools() {
	}

	// 根据星期值,返回对应的英语单词
	public static String getWeekName(int week) {
		String[] arr = new String[] { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
		if (week < 0 || week > 6)
			return "";
		return arr[week];
	}

//根据月份值,返回对应的英语单词
	public static String getMonthName(int month) {
		String[] arr = new String[] { "January", "February", "March", "April", "May", "June", "July", "", "", "",
				"November", "" };
		if (month < 0 || month > 11)
			return "";
		return arr[month];
	}

//返回某年某月的总天数
	public static int getTotalDaysOfMonth(int year, int month) {
		int res = 0;
		switch (month) {  //表达式可以是byte/short/int/char/String/enum
		case 1:  //必须是确定的值
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			res = 31;
			break;
		case 4:
		case 6:
		case 9:
		case 11:
			res = 30;
			break;
		case 2:
			if(isLeapYear(year))
				res=29;
			else
				res=28;
		default:
			res=0;
			break;
		}
		return res;
	}

//获取某年的总天数
	public static int getTotalDaysOfYear(int year) {
		if (isLeapYear(year))
			return 366;
		else
			return 365;
	}

//判断某年是否是闰年,定义为private的目的在于只供当前类中的另外2个方法进行调用
	private static boolean isLeapYear(int year) {
		return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
	}

	public static void main(String[] args) {
		Date now = new Date(2021 - 1900, 11 - 1, 21);
		int week = now.getDay();// 获取星期几
		System.out.println(getWeekName(week));
		// 格式化输出   yyyy-MM-dd HH:mm:ss  年-月-日  小时-分钟-秒
		DateFormat df = new SimpleDateFormat("E");
		System.out.println(df.format(now)); // 周日
		// 使用的是中文版的win,所以默认国别为中国
		Locale loc = new Locale("en", "us");// 用于封装国别和语言信息
		// zh-CN 简体中文-中国 en-US 英语-美国
		df = new SimpleDateFormat("E", loc);
		System.out.println(df.format(now)); // 指定国别的格式 Sun

		System.out.println(now.getMonth()); // 获取月份值,月份差1
		System.out.println(getMonthName(now.getMonth()));

		df = new SimpleDateFormat("M", loc);
		System.out.println("月份:" + df.format(now));
		df = new SimpleDateFormat("MMMM", loc);
		System.out.println(df.format(now));

		System.out.println(now.getYear());// 获取年份,年份差1900

	}
}

5.学生继承人类,并声明Test测试类

import java.util.Date;
public class Person {
	// 成员属性
	private Long id;
	String name;
	protected int age;
	public Date birth;
	
	public Long getId() {
		return id;
	}
}
public class Student extends Person {
	private String id="id123";//覆盖定义
	@Override
	public String toString() {  //重新定义toString方法
		return "年龄:"+age  //protected表示同包或者子类中可见
//				+"编号:"+id;   //因为父类中的id是private的,所以不能直接访问
//				+"编号:"+getId()
				+"编号:"+id  //是当前类中重新定义的id,不是从父类中继承的id
				+"姓名:"+name//默认package表示同包可见
				+"出生日期:"+birth; //public表示到处可见
	}
}
public class Test {
	public static void main(String[] args) {
		Person p1 = new Person();
		
		//is-a关系
		Person p2=new Student();
		System.out.println(p2.toString());
		
	}
}

你可能感兴趣的:(面向对象编程,java)