文章目录
- 巩固题
- 包练习
- 成员变量基础题
- 第1题:员工
- 第2题:日期类
- 成员方法基础题
- 第3题:三角形
- 第4题:日期类
- 第5题:数组工具类
- 拔高题
- 第6题:公民类
- 第7题:数组工具类
巩固题
包练习
每道作业题可以单独一个包。
成员变量基础题
第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 TestEmployee {public static void main(String[] args) {Employee emp1 = new Employee();emp1.id = 1;emp1.name = "张三";emp1.age = 23;emp1.salary = 10000;Employee emp2 = new Employee();emp2.id = 2;emp2.name = "李四";emp2.age = 22;emp2.salary = 11000;System.out.println("第1个员工的编号:" + emp1.id +",姓名:" + emp1.name + ",年龄:" + emp1.age + ",薪资:" + emp1.salary);System.out.println("第2个员工的编号:" + emp2.id +",姓名:" + emp2.name + ",年龄:" + emp2.age + ",薪资:" + emp2.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 TestMyDate {public static void main(String[] args) {MyDate bir = new MyDate();bir.year = 1995;bir.month = 5;bir.day = 5;System.out.println("生日:" + bir.year + "年" + bir.month + "月" + bir.day + "日");MyDate come = new MyDate();come.year = 2021;come.month = 5;come.day = 12;System.out.println("来尚硅谷:" + come.year + "年" + come.month + "月" + come.day + "日");MyDate go = new MyDate();go.year = 2021;go.month = 10;go.day = 25;System.out.println("毕业:" + go.year + "年" + go.month + "月" + go.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(){return a>0 && b>0 && c>0 && a+b>c && b+c>a && a+c>b;}boolean isRightTriangle(){return isTriangle() && (a*a + b*b == c*c || a*a + c*c == b*b || b*b + c*c == a*a);}boolean isEquilateralTriangle(){return isTriangle() && a == b && b == c;}boolean isIsoscelesTriangle(){return isTriangle() && (a == b || a == c || b == c);}double perimeter(){if(!isTriangle()){return 0.0;}return a + b + c;}double area(){if(!isTriangle()){return 0.0;}double p = a + b + c;return Math.sqrt(p * (p-a) * (p-b) * (p-c));}
}
package com.atguigu.homework3;public class TestTriangle {public static void main(String[] args) {Triangle t1 = new Triangle();t1.a = 3;t1.b = 4;t1.c = 5;System.out.println("t1是三角形吗?" + t1.isTriangle());System.out.println("t1是直角三角形吗?" + t1.isRightTriangle());System.out.println("t1是等腰三角形吗?" + t1.isIsoscelesTriangle());System.out.println("t1是等边三角形吗?" + t1.isEquilateralTriangle());System.out.println("t1的周长:" + t1.perimeter());System.out.println("t1的面积:" + t1.area());}
}
第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(){return year%4==0 && year%100!=0 || year%400==0;}int totalDaysOfYear(){return isLeapYear() ? 366 : 365;}int totalDaysOfMonth(){if(month == 4 || month == 6 || month == 9 || month == 11){return 30;}if(month == 2){return isLeapYear() ? 29 : 28;}return 31;}int daysOfTheYear(){int days = day;for(int i=1; i<month; i++){if(i==2){days += isLeapYear() ? 29 : 28;}else if(i==4 || i==6 || i==9 || i==11){days += 30;}else{days += 31;}}return days;}String monthName(){String[] monthNames = {"January","February","March","April","May","June","July","August","September","October","November","December"};return monthNames[month-1];}
}
package com.atguigu.homework4;public class TestMyDate {public static void main(String[] args) {MyDate my = new MyDate();my.year = 2021;my.month = 12;my.day = 29;System.out.println("今年是闰年吗?" + my.isLeapYear());System.out.println("月份名是" + my.monthName());System.out.println("这个月总天数:" + my.totalDaysOfMonth());System.out.println("这一年总天数:" + my.totalDaysOfYear());System.out.println("这一天是这一年的几天?" + my.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 max = arr[0];for (int i = 1; i < arr.length; i++) {if(arr[i] > max){max = arr[i];}}return max;}int indexOf(int[] arr, int value){for(int i=0; i<arr.length; i++){if(arr[i] == value){return i;}}return -1;}int lastIndexOf(int[] arr, int value){for(int i=arr.length-1; i>=0; i--){if(arr[i] == value){return i;}}return -1;}
}
package com.atguigu.homework5;public class ArrayToolsTest {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("第1次出现10的下标:" + tools.indexOf(arr, 10));System.out.println("最后1次出现10的下标:" + tools.lastIndexOf(arr, 10));System.out.println("第1次出现3的下标:" + tools.indexOf(arr,3));}
}
拔高题
第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;String cardId;MyDate birthday;void setBirthday(int year, int month, int day){birthday = new MyDate();birthday.year = year;birthday.month = month;birthday.day = day;}String getInfo(){return "姓名:" + name +",身份证号码:" + cardId + ",生日:" + birthday.dateToString();}
}
package com.atguigu.homework6;public class TestCitizen {public static void main(String[] args) {Citizen citizen = new Citizen();citizen.name = "张三";citizen.cardId = "110250199512012535";citizen.setBirthday(1995,12,1);System.out.println(citizen.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};
参考答案:
package com.atguigu.homework7;public class ArrayTools {int max(int[] arr){int max = arr[0];for (int i = 1; i < arr.length; i++) {if(arr[i] > max){max = arr[i];}}return max;}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 count = valueCount(arr, max);int[] all = new int[count];for (int i = 0,j = 0; i < arr.length; i++) {if(arr[i] == max) {all[j++] = i;}}return all;}void sort(int[] arr){for (int i = 1; i < arr.length; i++) {for (int j = 0; j < arr.length-i; j++) {if(arr[j] > arr[j+1]){int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}}void reverse(int[] arr, int start, int end){for(int i=0; i<(end-start)/2; i++){int temp = arr[i+start];arr[i+start] = arr[end-i];arr[end-i] = temp;}}int[] copyOf(int[] arr, int newLength){int[] newArr = new int[newLength];for (int i = 0; i < newArr.length && 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;}void fill(int[] arr, int start, int end, int value){for (int i = start; i <= end; i++) {arr[i] = value;}}String toString(int[] arr){String result = "{";for (int i = 0; i < arr.length; i++) {if(i<arr.length-1){result += arr[i] + ",";}else{result += arr[i];}}result += "}";return result;}
}
package com.atguigu.homework7;public class ArrayToolsTest {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("arr数组为:" +tools.toString(arr));int maxValue = tools.max(arr);System.out.println("arr数组中的最大值:" + maxValue);System.out.println("最大值的个数:" + tools.valueCount(arr,maxValue));int[] indexs = tools.maxIndex(arr);System.out.println("所有最大值下标:" + tools.toString(indexs));tools.sort(arr);System.out.println("排序后arr:" + tools.toString(arr));tools.reverse(arr, 1,5);System.out.println("反转[1,5]下标范围的元素后:"+ tools.toString(arr));int[] before = tools.copyOf(arr, 5);System.out.println("复制前面5个元素:" + tools.toString(before));int[] doubleArr = tools.copyOf(arr, arr.length*2);System.out.println("arr的两倍大数组:" + tools.toString(doubleArr));tools.fill(doubleArr, arr.length, doubleArr.length-1, 6);System.out.println("doubleArr新扩展的元素用6填充后:" + tools.toString(doubleArr));}
}