1.编写一个Worker类,为Worker类添加相应的代码,使得Worker对象能正确放入TreeSet中。并编写相应的测试代码。
/**
* Worker类
*/
public class Worker implements Comparable<Worker>{
/**
* 私有属性
*/
private String name;
private int age;
private double salary;
/**
* 构造方法
*/
public Worker() {
} public Worker(String name, int age, double salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
/**
* getter setter方法
*/
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;
} /**
* 重写toString方法
*/
public String toString(){
return "工人信息 : { "+"姓名 = "+name+","+"年龄 = "+age+","+"薪水 = "+salary+" }";
} /**
* 重写compareTo方法:按年龄从小到大排序,年龄相同按名字的字典顺序排列
*/
@Override
public int compareTo(Worker other) {
if (this.age != other.age){
return this.age - other.age;
}else {
return this.name.compareTo(other.getName());
}
}
}
/**
* 测试类
*/
public class TestWorker {
public static void main(String[] args) {
/**
* 创建Worker对象,通过构造方法完成赋值
*/
Worker w1 = new Worker("F",27,5500);
Worker w2 = new Worker("E",28,6500);
Worker w3 = new Worker("B",26,5800);
Worker w4 = new Worker("A",26,5300);
/**
* 创建TreeSet集合存放工人数据信息
*/
Set<Worker> set = new TreeSet<Worker>();
set.add(w1);
set.add(w2);
set.add(w3);
set.add(w4);
/**
* 遍历Set,输出结果
*/
for(Worker w : set){
System.out.println(w);
}
}
}

运行结果:

2.设计一个多线程的程序如下:设计一个火车售票模拟程序。假如火车站要有100张火车票要卖出,现在有10个售票窗口同时售票,用10个线程模拟这10个售票窗口的售票情况。

/**
* 定义售票类实现Runnable接口
*/
public class SaleTicket implements Runnable {
/**
* 定义初始变量
* total--总票数
* count--票号(从0开始)
*/
public int total = 100;
public int count = 0; /**
* 重写run()方法
*/
@Override
public void run() {
while (total > 0){
synchronized (this){
if (total > 0){
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
/**
* 票号++
* 总票数--
*/
count++;
total--;
System.out.println(Thread.currentThread().getName()+"售出票号为:"+count+
" 的票"+"当前余票为:"+total);
}
}
}
}
}
/**
* 测试类
*/
public class TestSaleTicket {
public static void main(String[] args) {
/**
* 创建线程对象,启动线程
*/
SaleTicket st = new SaleTicket();
/**
* 使用循环创建启动线程
*/
for (int i = 1;i <= 5;i++){
Thread t = new Thread(st,i+"号售票窗口");
t.start();
}
/**
* 也可以手动创建5个线程并启动,代码稍显复杂
*/
SaleTicket st1 = new SaleTicket();
Thread t1 = new Thread(st1);
Thread t2 = new Thread(st1);
Thread t3 = new Thread(st1);
Thread t4 = new Thread(st1);
Thread t5 = new Thread(st1);
t1.setName("窗口6");
t2.setName("窗口7");
t3.setName("窗口8");
t4.setName("窗口9");
t5.setName("窗口10");
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
}
}

运行结果:

**各线程随机执行售票功能

3.对一个数组进行折半查找,使用递归和非递归实现。

/**
* 递归实现数组的折半查找
*/
public class TestRecursionBinarySearch {
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,7};
int key = 1;
int index = recursionBinarySearch(array,key);
System.out.println(key+"的索引是"+index);
}
public static int recursionBinarySearch(int[] arr,int key){
int start = 0;
int end = arr.length - 1;
return recursionBinarySearch(arr,start,end,key);
} private static int recursionBinarySearch(int[] arr, int start, int end, int key) {
/**
* 递归的结束条件
*/
if (start > end){
return -1;
}
/**
* 计算中间索引并获得其值
*/
int mid = (start + end) / 2;
int value = arr[mid];
/**
* 进行比较查询
*/
if (key > value){
start = mid + 1;
return recursionBinarySearch(arr,start,end,key);
}else if (key < value){
end = mid - 1;
return recursionBinarySearch(arr,start,end,key);
}else {
return mid;
}
}
}

运行结果:

/**
* 非递归实现数组的折半查找
*/
public class TestBinarySearch {
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,7};
int key = 7;
int index = binarySearch(array,key);
System.out.println(key+"的索引是"+index);
}
public static int binarySearch(int[] arr,int key){
/**
* 定义起始位置和结束位置索引号,第一次查找从两头开始(即start和end)
*/
int start = 0;
int end = arr.length - 1;
//System.out.println("-1 代表要查的元素不在此数组中");
while (start <= end){
/**
* 计算中间索引号,得到对应元素值
*/
int mid = (start + end) / 2;
int value = arr[mid];
/**
* 将要查找的元素key值和中间元素比较
*/
if (key == value){
return mid;
}else if (key < value){
end = mid - 1;
}else {
start = mid + 1;
}
}
return -1;
}
}

运行结果:

JavaSE编码试题强化练习4的更多相关文章

  1. JavaSE编码试题强化练习1

    1. 编写应用程序,创建类的对象,分别设置圆的半径.圆柱体的高,计算并分别显示圆半径.圆面积.圆周长,圆柱体的体积. /** * 定义父类--圆类 */ public class Circle { / ...

  2. JavaSE编码试题强化练习7

    1.编写应用程序,创建类的对象,分别设置圆的半径.圆柱体的高,计算并分别显示圆半径.圆面积.圆周长,圆柱体的体积. /** * 圆类 */ public class Circle { /** * 类属 ...

  3. JavaSE编码试题强化练习6

    1.写出选择排序的代码实现,对一个int数组进行排序 public class TestSelectSort { public static void main(String[] args) { in ...

  4. JavaSE编码试题强化练习5

    1.不使用函数实现字符串的翻转 /** * 1.不使用函数实现字符串的翻转 */ public class TestStringReverse { public static void main(St ...

  5. JavaSE编码试题强化练习3

    1.给20块钱买可乐,每瓶可乐3块钱,喝完之后退瓶子可以换回1块钱,问最多可以喝到多少瓶可乐. public class TestCirculation { public static void ma ...

  6. JavaSE编码试题强化练习2

    1.编写递归算法程序:一列数的规则如下: 0.1.1.2.3.5.8.13.21.34...... 求数列的第40位数是多少. public class TestRecursion { public ...

  7. JavaSE面试题

    JavaSE面试题 欢迎到我的Git仓库去提交您觉得优秀的内容! 1.是否可以从一个static方法内部发出对非static方法的调用? 不可以.当一个static方法被调用时,可能还没有创建任何实例 ...

  8. [002] - JavaSE面试题(二):基本数据类型与访问修饰符

    第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [002] - JavaSE面试题(二):基本数据类型与访问修饰符 第1问:Java的数据类型有哪 ...

  9. JavaSE 面试题: 类初始化和实例初始化等

    JavaSE 面试题 类初始化和实例初始化等 class Father { private int i = test(); private static int j = method(); stati ...

随机推荐

  1. PAT Basic 1031 查验身份证 (15 分)

    一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8, ...

  2. L3-002 特殊堆栈 (30 分)

    大家都知道“堆栈”是一种“先进后出”的线性结构,基本操作有“入栈”(将新元素插入栈顶)和“出栈”(将栈顶元素的值返回并从堆栈中将其删除).现请你实现一种特殊的堆栈,它多了一种操作叫“查中值”,即返回堆 ...

  3. 谷歌将用QUIC传输层技术加速互联网

    安全这个话题,要感谢斯诺登,过去的安全就是攻和防之间的关系,即我们用一种什么样的体系.架构和模式去构建一个密不可破的安全系统.” 对IETF工作组忽视外部观察者看起来是一件甚么微不足道的事情的能力感到 ...

  4. C++ GUI Qt4学习笔记08

    C++ GUI Qt4学习笔记08   qtc++signal图形引擎文档 本章介绍Qt的二维图形引擎,Qt的二维图形引擎是基于QPainter类的.<span style="colo ...

  5. Java日期时间以及日期相互转换_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 Java日期时间,以及相互转化,供大家参考,具体内容如下 package com.study.string; impor ...

  6. js 将时间戳转成时间格式化

    一.时间戳 时间戳是以时间元年1970年开始算起到当前时间的一个值,以秒为单位,比如1535694719秒,如何转化为我们想要的格式,yyyy/mm/dd或者yyyy-MM-dd hh:mm,格式根据 ...

  7. 2017年cocoaPods 1.2.1升级

    还在用老版本的ccoaPods,安装三方库时,会报错 : [!] Invalid `Podfile` file: [!] The specification of `link_with` in the ...

  8. 树状数组板子 x

    树状数组! 参考 http://www.cnblogs.com/zzyh/p/6992148.html 洛谷 P3374 [模板]树状数组 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: ...

  9. Java 内存屏障

    内存屏障(Memory Barrier,或有时叫做内存栅栏,Memory Fence)是一种CPU指令,用于控制特定条件下的重排序和内存可见性问题.Java编译器也会根据内存屏障的规则禁止重排序. 内 ...

  10. Python_016(面向对象之属性和类方法)

    一.特性(property,setter,deleter) 1.属性:将一个方法伪装成一个属性,在代码级别上没有本质的提升,但是看起来更合理; class Person: def __init__(s ...