作业1:
给定一个大小为 n 的数组 nums ,返回其中的多数元素。
多数元素是指在数组中出现次数 大于 n/2 的元素。
[1,1,1,1,2,3,3]
分析:多数元素是指在数组中出现次数 大于 n/2 的元素。所以多数元素应该是中位数元素。
我们可以先对数组进行排序,再找中位数元素
package com.openlab.day13;
public class Work01 {
public static void main(String[] args) {
int[] nums = new int[] {1, 2, 3, 1, 3, 1, 1};
Solution solution = new Solution();
solution.sort(nums);//先排序
int num = solution.findMoreNum(nums);//再找中位数
System.out.println("多数元素是:" + num);
}
}
class Solution {
//找中位数
public int findMoreNum(int[] nums) {
//分奇偶数获取中位数
if((nums.length & 1) == 0){//偶数
int s1 = nums[nums.length / 2];
int s2 = nums[(nums.length / 2) - 1];
return (s1 + s2) / 2;
}else{
return nums[nums.length / 2];
}
}
//排序
public void sort(int[] nums) {
for(int i = 0; i < nums.length - 1; i++) {
for(int j = i + 1; j < nums.length; j++) {
if(nums[i] < nums[j]) {
nums[i] = nums[i] ^ nums[j];
nums[j] = nums[i] ^ nums[j];
nums[i] = nums[i] ^ nums[j];
}
}
}
}
}
作业2:综合案例(用户博客管理系统):
package com.openlab.day13;
import java.util.Scanner;
public class Work02 {
public static void main(String[] args) {
Blog blog = new Blog();
Scanner input = new Scanner(System.in);
blog.menu();
System.out.print("请输入您的选项:");
int choice1 = input.nextInt();
switch(choice1) {
case 1:
System.out.println("~~~~~~用户注册~~~~~~");
System.out.println("请输入您的用户名");
String name1 = input.next();
System.out.println("请输入您的密码:");
String password1 = input.next();
System.out.println("请确认您的密码:");
String password2 = input.next();
if(password1.equals(password2)) {
System.out.println("恭喜您,注册成功");
}
break;
case 2:
System.out.println("~~~~~~用户登录~~~~~~");
System.out.print("请输入您的用户名");
String name = input.next();
System.out.print("请输入您的密码:");
String password = input.next();
System.out.println("恭喜您,登录成功");
break;
}
blog.menu1();
System.out.print("请输入您的选项:");
int choice2 = input.nextInt();
switch(choice2) {
case 1:
System.out.println("~~~~~~发表博客~~~~~~");
System.out.print("请输入您标题:");
String title = input.next();
System.out.println("请输入您的正文内容:");
String content = input.nextLine();
System.out.println("请输入您的文章概述:");
String outline = input.nextLine();
System.out.println("博客发表成功!");
System.out.println(title);
System.out.println(content);
System.out.println("文章概述:" + outline);
break;
case 2:
System.out.println("~~~~~~进入社区~~~~~~");
break;
}
input.close();
}
}
class Blog{
public void menu() {
System.out.println("~~~~~~欢迎进入博客系统~~~~~~");
System.out.println("\t1. 用户注册");
System.out.println("\t2. 用户登录");
}
public void menu1() {
System.out.println("~~~~~~欢迎进入~~~~~~");
System.out.println("\t1. 发表博客");
System.out.println("\t2. 进入社区");
}
}
作业3:(抽象类)
定义一个抽象的"Role"类 有姓名 年龄 性别等成员变量
1. 要求尽可能隐藏所有变量(能够私有就私有,能够保护就不要公有)
再通过GetXXX()和SetXXX()方法对各变量进行读写。具有一个抽象的play()方法
该方法不返回任何值 同时至少定义两个构造方法。Role类中要体现出this的几种用法。
2. 从Role类派生出一个"Employee"类 该类具有Role类的所有成员
构造方法除外 并扩展 salary成员变量 同时增加一个静态成员变量“职工编号 ID ”。
同样要有至少两个构造方法 要体现出this和super的几种用法
还要求覆盖play()方法 并提供一个final sing()方法。
3. "Manager"类继承"Employee"类 有一个final成员变量"vehicle"
4. 在main()方法中制造Manager和Employee对象,并测试这些对象的方法
package com.openlab.day13;
public abstract class Role {
private String name;//姓名
private int age;//年龄
private String gender;//性别
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 String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Role() {//无参构造方法
System.out.println("这是Role的无参构造方法");
}
public Role(String name, int age, String gender) {//有参构造方法
super();
this.name = name;
this.age = age;
this.gender = gender;
System.out.println("这是Role的有参构造方法");
}
public abstract void play();
}
package com.openlab.day13;
public class Employee extends Role {
private double salary;//扩展成员
private static int id;//静态成员变量
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public static int getId() {
return id;
}
public static void setId(int id) {
Employee.id = id;
}
public Employee() {
super();
System.out.println("这是Employee的无参构造方法");
}
public Employee(double salary) {
super();
this.salary = salary;
System.out.println("这是Employee的有参构造方法");
}
@Override
public void play() {
System.out.println("我会去户外做运动");
}
public final void sing() {
System.out.println("我会唱很多流行歌曲");
}
public static void say() {
System.out.println("hello");
}
}
package com.openlab.day13;
public class Manager extends Employee {
private final String VEHICLE = "小汽车";
private double money;//金钱
public String getVEHICLE() {
return VEHICLE;
}
public double getMoeney() {
return money;
}
public void setMoeney(double moeney) {
this.money = moeney;
System.out.println("这是Manager的有参构造方法");
}
public Manager() {
super();
System.out.println("这是Manager的无参构造方法");
}
public Manager(double money) {
super(2345);
this.money = money;
System.out.println("这是Manager的有参构造方法");
}
}
package com.openlab.day13;
public class Work02 {
public static void main(String[] args) {
Manager manager1 = new Manager();
//manager.VEHICLE;私有报错
System.out.println(manager1.getVEHICLE());//final,只能访问不能修改
System.out.println("-----------------------");//分隔
Manager manager2 = new Manager(51323.4865);//调用Manager的有参构造方法
System.out.println(manager2.getMoeney());//获取Manager属性
manager2.setMoeney(486465); //修改Manager属性
System.out.println(manager2.getMoeney());
System.out.println("-----------------------");//分隔
Employee employee = new Employee();
employee.sing();//用对象调用普通方法
Employee.say();//用类名调用静态方法
}
}
作业4:(抽象类)
品尝饮料
1、建立一个Java抽象类Drink 应当 a、声明一个抽象方法taste() 该方法负责输出饮料的味道 b、声明int型常量来代表不同的饮料类型 咖啡、啤酒、牛奶 如 c、声明静态工厂方法getDrink(int drinkType) 根据传入的参数创建不同的饮料对象 并返回该对象 建议使用switch语句。该方法要求声明DrinkNotFoundException 当没有相对应的饮料类型时 抛出该异常。
2、建立Drink的具体子类 a、分别建立Drink的子类 Coffee 代表咖啡 Beer 代表啤酒 Milk 代表牛奶 ; b、实现taste()方法 要求在的控制台打印各自味道特征。
3、建立异常类DrinkNotFoundException a、继承Exception b、在Drink的 方 法getDrink(int drinkType)中 声 明 引 发DrinkNotFoundException异常 当传入的参数没有相对应的饮料类型时 抛出异常。 c、在使用getDrink方法的类中捕捉该异常。
4、建立Test测试类 测试以上内容的正确性 a、编写main方法 通过命令行传参的方式传入某种饮料的类型。 b、在main方法中 调用Drink类的getDrink方法 获得相应的饮料对象。注意捕获DrinkNotFoundException。 c、然后调用该饮料对象的taste()方法 输出该饮料的味道。
5、编译程序 并运行。
注意事项 1、仔细审题 把题目要求理解准确 2、请注意多态性的运用 3、请注意代码的书写、命名符合规范 应有适当的注释
package com.openlab.day13;
public abstract class Drink {
abstract void taste(); //负责输出饮料的味道
public static Drink getDrink(int drinkType) {//获得相应的饮料对象
Drink drink = null;
switch(drinkType) {
case 1:
drink = new Coffee();
break;
case 2:
drink = new Beer();
break;
case 3:
drink = new Milk();
break;
}
return drink;
}
}
package com.openlab.day13;
public class Coffee extends Drink {
@Override
void taste() {
System.out.println("浓香,略苦");
}
}
package com.openlab.day13;
public class Beer extends Drink {
@Override
void taste() {
System.out.println("酒精的香味,味涩");
}
}
package com.openlab.day13;
public class Milk extends Drink {
@Override
void taste() {
System.out.println("浓香,甜味,奶牛的味道");
}
}
package com.openlab.day13;
public class Work04 {
public static void main(String[] args) {
Drink drink = Drink.getDrink(3);
drink.taste();
}
}