巩固题
包练习
每道作业题可以单独一个包。
成员变量基础题
第1题:员工
案例需求:
(1)声明员工类Employee,包含属性:编号、姓名、年龄、薪资,
(2)在测试类的main方法中,创建2个员工对象,并为属性赋值,并打印两个员工的信息。
参考答案:
package com.atguigu.homework1;
public class Employee {
int id;
String name;
int age;
double salary;
}
package com.atguigu.homework1;
public class Homework1 {
public static void main(String[] args) {
Employee employee1 = new Employee();
employee1.id = 1;
employee1.name = "张三";
employee1.age = 23;
employee1.salary = 10000.0;
Employee employee2 = new Employee();
employee2.id = 2;
employee2.name = "李四";
employee2.age = 22;
employee2.salary = 11000.0;
System.out.println("第" + employee1.id + "个员工的编号:" + employee1.id + ",姓名:" + employee1.name + ", 年龄:" + employee1.age + ", 薪资:" + employee1.salary);
System.out.println("第" + employee2.id + "个员工的编号:" + employee2.id + ",姓名:" + employee2.name + ", 年龄:" + employee2.age + ", 薪资:" + employee2.salary);
}
}
第2题:日期类
案例需求:
(1)声明一个日期类MyDate,包含属性:年、月、日
(2)在测试类的main方法中,创建3个日期对象,一个是你的出生日期,一个是来尚硅谷的日期,一个是毕业的日期,并打印显示
参考答案:
package com.atguigu.homework2;
public class MyDate {
int year;
int month;
int day;
}
package com.atguigu.homework2;
public class Homework2 {
public static void main(String[] args) {
MyDate birthday = new MyDate();
birthday.year = 2000;
birthday.month = 5;
birthday.day = 5;
MyDate comAtGuiGu = new MyDate();
comAtGuiGu.year = 2024;
comAtGuiGu.month = 3;
comAtGuiGu.day = 28;
MyDate graduationDate = new MyDate();
graduationDate.year = 2023;
graduationDate.month = 6;
graduationDate.day = 18;
System.out.println("我的出生日期是:" + birthday.year + " 年 " + birthday.month + " 月 " + birthday.day + " 日");
System.out.println("我来尚硅谷的日期是:" + comAtGuiGu.year + " 年 " + comAtGuiGu.month + " 月 " + comAtGuiGu.day + " 日");
System.out.println("我大学毕业日期:" + graduationDate.year + " 年 " + graduationDate.month + " 月 " + graduationDate.day + " 日");
}
}
成员方法基础题
第3题:三角形
案例需求:
(1)声明一个三角形类Triangle,包含属性:a,b,c,都是double类型,表示三条边,包含几个方法:
-
boolean isTriangle():判断是否是一个三角形
-
boolean isRightTriangle():判断是否是一个直角三角形
-
boolean isIsoscelesTriangle():判断是否是一个等腰三角形
-
boolean isEquilateralTriangle():判断是否是一个等边三角形
-
double area():根据三条边,用海伦公式求面积
-
double perimeter():求周长
(2)在测试类的main方法中创建三角形对象,将三角形的三条边设置为3,4,5,调用方法测试。
参考答案:
package com.atguigu.homework3;
public class Triangle {
double a;
double b;
double c;
//判断是否是一个三角形
boolean isTriangle() {
if (a + b >= c || a + c >= b || b + c >= a) return true;
return false;
}
//判断是否是一个直角三角形
boolean isRightTriangle() {
if (a * a + b * b == c * c || a * a == b * b + c * c || a * a + c * c == b * b) return true;
return false;
}
//判断是否是一个等腰三角形
boolean isIsoscelesTriangle() {
if (a == b || a == c || b == c) return true;
return false;
}
//判断是否是一个等边三角形
boolean isEquilateralTriangle() {
if (a == b && a == c && b == c) return true;
return false;
}
//根据三条边,用海伦公式求面积
double area() {
double p = (double) (a + b + c) / 2;
return Math.sqrt(p * (p - a) * (p - b) * (p - c));
}
//求周长
double perimeter() {
return a + b + c;
}
}
package com.atguigu.homework3;
public class Homework3 {
public static void main(String[] args) {
Triangle triangle1 = new Triangle();
triangle1.a = 3;
triangle1.b = 4;
triangle1.c = 5;
System.out.println("triangle1是否是一个三角形:" + triangle1.isTriangle());
System.out.println("triangle1是否是一个直角三角形:" + triangle1.isRightTriangle());
System.out.println("triangle1是否是一个等腰三角形:" + triangle1.isIsoscelesTriangle());
System.out.println("triangle1是否是一个等边三角形:" + triangle1.isEquilateralTriangle());
System.out.println("triangle1的面积是:" + triangle1.area());
System.out.println("triangle1的周长:" + triangle1.perimeter());
}
}
第4题:日期类
案例需求:
(1)声明一个日期类MyDate,
- 包含属性:年、月、日
- boolean isLeapYear():判断是否是闰年
- String monthName():根据月份值,返回对应的英语单词
- int totalDaysOfMonth():返回这个月的总天数
- int totalDaysOfYear():返回这一年的总天数
- int daysOfTheYear():返回这一天是当年的第几数
(2)在测试类的main方法中,创建MyDate对象,赋值为当天日期值,调用方法测试。
参考答案:
package com.atguigu.homework4;
public class MyDate {
int year;
int month;
int day;
//判断是否是闰年
boolean isLeapYear() {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) return true;
return false;
}
//根据月份值,返回对应的英语单词
String monthName() {
String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
return monthNames[month - 1];
}
//返回这个月的总天数
int totalDaysOfMonth() {
if (month >= 1 && month <= 12) {
if (month == 4 || month == 6 || month == 9 || month == 11) return 30;
else if (month == 2) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) return 29;
return 28;
} else return 31;
}
return 0; //返回0表示月份输入错误
}
//返回这一年的总天数
int totalDayOfYear() {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) return 366;
return 365;
}
//返回这一天是当年的第几天
int daysOfTheYear() {
int days = day;
for (int i = 1; i < month; i++) {
if (i == 4 || i == 6 || i == 9 || i == 11) {
days += 30;
} else if (i == 2) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
days += 29;
} else {
days += 28;
}
} else {
days += 31;
}
}
return days;
}
}
package com.atguigu.homework4;
public class Homework4 {
public static void main(String[] args) {
MyDate date1 = new MyDate();
date1.year = 2024;
date1.month = 4;
date1.day = 9;
System.out.println(date1.year+"是否是闰年"+date1.isLeapYear());
System.out.println(date1.month + "月对应的英文单词是" + date1.monthName());
System.out.println(date1.month + "月的总天数是:" + date1.totalDaysOfMonth());
System.out.println(date1.year + "年的总天数是:" + date1.totalDayOfYear());
System.out.println(date1.year + " 年 " + date1.month + " 月 " + date1.day + " 日是 " + date1.year + " 年的第 " + date1.daysOfTheYear() + " 天");
}
}
第5题:数组工具类
案例需求:
(1)声明一个数组工具类ArrayTools,包含如下方法:
- int sum(int[] arr):求所有元素总和
- int max(int[] arr):求所有元素的最大值
- int indexOf(int[] arr, int value):查找value在arr数组中第一次出现的下标,如果不存在返回-1
- int lastIndexOf(int[] arr, int value):查找value在arr数组中最后一次出现的下标,如果不存在返回-1
(2)在测试类的main方法中,调用方法测试,例如:
int[] arr = {1,2,10,4,5,10,7,8,9,10};
参考答案:
package com.atguigu.homework5;
public class ArrayTools {
//求所有元素和
int sum(int[] arr) {
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
//求所有元素最大值
int max(int[] arr) {
int maxNum = arr[0];
for (int i = 0; i < arr.length; i++) {
if (maxNum < arr[i]) maxNum = arr[i];
}
return maxNum;
}
//查找value在arr数组中第一次出现的下标。如果不存在返回-1
int indexOf(int[] arr, int value) {
int index = -1;
for (int i = 0; i < arr.length; i++) {
if (value == arr[i]) return i;
}
return index;
}
//查找value在arr数组中最后一次出现的下标,如果不存在返回-1
int lastIndexOf(int[] arr, int value) {
int index = -1;
for (int i = 0; i < arr.length; i++) {
if (value == arr[i]) index = i;
}
return index;
}
}
package com.atguigu.homework5;
public class Homework5 {
public static void main(String[] args) {
ArrayTools tools= new ArrayTools();
int[] arr = {1,2,10,4,5,10,7,8,9,10};
System.out.println("所有元素总和是:" + tools.sum(arr));
System.out.println("所有元素的最大值是" + tools.max(arr));
System.out.println("在数组中第一次出现10的下标" + tools.indexOf(arr, 10));
System.out.println("在数组中最后一次出现10的下标" + tools.lastIndexOf(arr, 10));
System.out.println("在数组中最后一次出现6的下标" + tools.lastIndexOf(arr, 6));
}
}
拔高题
第6题:公民类
案例需求:
(1)声明一个日期类MyDate,
- 包含属性:年、月、日,
- 包含String dateToString()方法,返回“xxxx年xx月xx日”
(2)声明公民类Citizen,
- 包含属性:姓名,生日,身份证号,其中姓名是String类型,生日是MyDate类型,身份证号也是String类型。
- 包含String getInfo()方法,返回“姓名:xx,身份证号码:xx,生日:xxxx年xx月xx日”
- 包含void setBirthday(int year, int month, int day):设置生日
(3)在测试类的main方法中,创建你们家庭成员的几个对象,并打印信息。
参考答案:
package com.atguigu.homework6;
public class MyDate {
int year;
int month;
int day;
String dateToString() {
return year + "年" + month + "月" + day + "日";
}
}
package com.atguigu.homework6;
public class Citizen {
String name;
MyDate birthday;
String id;
String getInfo() {
return "姓名:" + name + ",身份证号:" + id + ",生日" + birthday.dateToString();
}
//设置生日
void setBirthday(int year, int month, int day) {
birthday = new MyDate();
birthday.year = year;
birthday.month = month;
birthday.day = day;
}
}
package com.atguigu.homework6;
public class Homework6 {
public static void main(String[] args) {
Citizen people = new Citizen();
people.name = "张云志";
people.setBirthday(2000, 5, 5);
people.id = "340721200005055436";
System.out.println(people.getInfo());
}
}
第7题:数组工具类
案例需求:
(1)声明一个数组工具类ArrayTools,包含如下方法:
- int max(int[] arr):求所有元素的最大值
- int valueCount(int[] arr, int value):查找value在arr数组中出现的次数,如果不存在返回0
- int[] maxIndex(int[] arr):找出所有最大值
- void sort(int[] arr):实现元素从小到大排序
- void reverse(int[] arr, int start, int end):反转[start,end]范围内的元素
- int[] copyOf(int[] arr, int newLength):复制arr数组,新数组的长度newLength。如果newLength<=arr.length,则复制arr数组的[0, newLength-1]范围的元素,如果newLength>arr.length,则复制arr数组的所有元素到新数组,剩下的元素则默认就可以。
- boolean equals(int[] arr1, int[] arr2):判断两个数组的长度和元素是否都相等,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。
- void fill(int[] arr, int start, int end, int value) :将arr数组[start,end]范围的元素赋值为value。
- String toString(int[] arr):将元素拼接为"{元素1,元素2,…}"的字符串返回。
(2)在测试类的main方法中,调用方法测试例如:
int[] arr = {1,2,10,4,5,10,7,8,9,10};
参考答案:
public class ArrayTools {
//求所有元素的最大值
int max(int[] arr) {
int max = 0;
for (int i = 0; i < arr.length; i++) {
if (max < arr[i]) max = arr[i];
}
return max;
}
//查找value在arr数组中出现的次数,如果不存在返回0
int valueCount(int[] arr, int value) {
int count = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == value) count++;
}
return count;
}
//找出所有最大值
int[] maxIndex(int[] arr) {
int max = max(arr);
int[] maxnum=new int[arr.length];
for (int i = 0; i < arr.length; i++) {
if (max==arr[i]){
maxnum[i]=max;
};
}
return maxnum;
}
//实现元素从小到大排序
void sort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[i] > arr[i + 1]) {
int x = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = x;
}
}
}
}
//反转[start,end]范围内的元素
void reverse(int[] arr, int start, int end) {
while (start < end) {
int x = arr[start];
arr[start] = arr[end-1];
arr[end-1] = x;
start++;
end--;
}
}
//复制arr数组,新数组的长度newLength。如果newLength<=arr.length,则复制arr数组的[0, newLength-1]范围的元素,
// 如果newLength>arr.length,则复制arr数组的所有元素到新数组,剩下的元素则默认就可以。
int[] copyOf(int[] arr, int newLength) {
int[] newArr = new int[newLength];
if (newLength <= arr.length) {
for (int i = 0; i < newArr.length; i++) {
newArr[i] = arr[i];
}
} else {
for (int i = 0; i < arr.length; i++) {
newArr[i] = arr[i];
}
}
return newArr;
}
//判断两个数组的长度和元素是否都相等,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。
boolean equals(int[] arr1, int[] arr2) {
if (arr1.length != arr2.length) return false;
for (int i = 0; i < arr1.length; i++) {
if (arr1[i] != arr2[i]) return false;
}
return true;
}
//将arr数组[start,end]范围的元素赋值为value
void fill(int[] arr, int start, int end, int value) {
for (int i = start; i <= end; i++) {
arr[i] = value;
}
}
//将元素拼接为"{元素1,元素2,......}"的字符串返回。
String toString(int[] arr) {
String stringContent = "";
for (int i = 0; i < arr.length; i++) {
stringContent += arr[i];
if (i < arr.length - 1) {
stringContent += ",";
}
}
return stringContent;
}
}
import java.lang.reflect.Array;
import java.util.Arrays;
public class Homework7 {
public static void main(String[] args) {
ArrayTools tools = new ArrayTools();
int[] arr = {1, 2, 10, 4, 5, 10, 7, 8, 9, 10};
System.out.println("所有元素最大值是:" + tools.max(arr));
System.out.println("查找10在arr数组中出现的次数,如果不存在返回0:" + tools.valueCount(arr, 10));
System.out.println("查找6在arr数组中出现的次数,如果不存在返回0:" + tools.valueCount(arr, 6));
/*tools.maxIndex(arr);*/
System.out.println("找出所有最大值:" + tools.toString(tools.maxIndex(arr)));
tools.sort(arr);
System.out.println("实现从小到大排序:" + tools.toString(arr));
tools.reverse(arr, 1, 6);
System.out.println("反转后的元素为:" + tools.toString(arr));
tools.copyOf(arr, 8);
System.out.println("长度小于arr.length复制后的数组为" + tools.toString(tools.copyOf(arr,8)));
tools.copyOf(arr, 12);
System.out.println("长度大于arr.length复制后的数组为" + tools.toString(tools.copyOf(arr,12)));
int[] arr1 = {1, 2, 10, 4, 5, 10, 7, 8, 9, 10};
int[] arr2 = {1, 2, 10, 4, 5, 10, 7, 9, 10};
int[] arr3 = {1, 2, 10, 4, 5, 10, 8, 8, 9, 10};
int[] arr4 = {1, 2, 10, 4, 5, 10, 7, 8, 9, 10};
System.out.println("判断arr1和arr数组是否相等:" + tools.equals(arr1, arr4)); //相等
System.out.println("判断arr1和arr数组是否相等:" + tools.equals(arr, arr2)); //长度不相等
System.out.println("判断arr1和arr数组是否相等:" + tools.equals(arr, arr3)); //内容不相等
tools.fill(arr,1,6,8);
System.out.println("将arr数组[1,6]范围的元素赋值为8:"+tools.toString(arr));
System.out.println("拼接后的字符串是:" + tools.toString(arr));
}
}
;
int[] arr2 = {1, 2, 10, 4, 5, 10, 7, 9, 10};
int[] arr3 = {1, 2, 10, 4, 5, 10, 8, 8, 9, 10};
int[] arr4 = {1, 2, 10, 4, 5, 10, 7, 8, 9, 10};
System.out.println(“判断arr1和arr数组是否相等:” + tools.equals(arr1, arr4)); //相等
System.out.println(“判断arr1和arr数组是否相等:” + tools.equals(arr, arr2)); //长度不相等
System.out.println(“判断arr1和arr数组是否相等:” + tools.equals(arr, arr3)); //内容不相等
tools.fill(arr,1,6,8);
System.out.println("将arr数组[1,6]范围的元素赋值为8:"+tools.toString(arr));
System.out.println("拼接后的字符串是:" + tools.toString(arr));
}
}