JavaSE编码试题强化练习4
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的更多相关文章
- JavaSE编码试题强化练习1
1. 编写应用程序,创建类的对象,分别设置圆的半径.圆柱体的高,计算并分别显示圆半径.圆面积.圆周长,圆柱体的体积. /** * 定义父类--圆类 */ public class Circle { / ...
- JavaSE编码试题强化练习7
1.编写应用程序,创建类的对象,分别设置圆的半径.圆柱体的高,计算并分别显示圆半径.圆面积.圆周长,圆柱体的体积. /** * 圆类 */ public class Circle { /** * 类属 ...
- JavaSE编码试题强化练习6
1.写出选择排序的代码实现,对一个int数组进行排序 public class TestSelectSort { public static void main(String[] args) { in ...
- JavaSE编码试题强化练习5
1.不使用函数实现字符串的翻转 /** * 1.不使用函数实现字符串的翻转 */ public class TestStringReverse { public static void main(St ...
- JavaSE编码试题强化练习3
1.给20块钱买可乐,每瓶可乐3块钱,喝完之后退瓶子可以换回1块钱,问最多可以喝到多少瓶可乐. public class TestCirculation { public static void ma ...
- JavaSE编码试题强化练习2
1.编写递归算法程序:一列数的规则如下: 0.1.1.2.3.5.8.13.21.34...... 求数列的第40位数是多少. public class TestRecursion { public ...
- JavaSE面试题
JavaSE面试题 欢迎到我的Git仓库去提交您觉得优秀的内容! 1.是否可以从一个static方法内部发出对非static方法的调用? 不可以.当一个static方法被调用时,可能还没有创建任何实例 ...
- [002] - JavaSE面试题(二):基本数据类型与访问修饰符
第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [002] - JavaSE面试题(二):基本数据类型与访问修饰符 第1问:Java的数据类型有哪 ...
- JavaSE 面试题: 类初始化和实例初始化等
JavaSE 面试题 类初始化和实例初始化等 class Father { private int i = test(); private static int j = method(); stati ...
随机推荐
- MASM DEBUG LINKER免费下载
这资源全被CSDN霸占了,对于我这种不使用CSND的人,没积分,真TM不好找,搞个共享的. 网盘链接,永久有效 https://pan.baidu.com/s/1Ws5axrfos1cpWL9jyAE ...
- wpf socket 简单通讯示例
源码下载地址:https://github.com/lizhiqiang0204/WPF-Socket 效果如下:
- WebStorm / IDEA最新激活码2019----100%随时可用
亲测日期:2019.12.24 网址里面有 lookdiv.com 里面的钥匙就是lookdiv.com 或者直接点击备用码 http://lookdiv.com/spare.html 进入可能会比 ...
- [luogu]P3941 入阵曲[前缀和][压行]
[luogu]P3941 入阵曲 题目描述 小 F 很喜欢数学,但是到了高中以后数学总是考不好. 有一天,他在数学课上发起了呆:他想起了过去的一年.一年前,当他初识算法竞赛的 时候,觉得整个世界都焕然 ...
- 【bzoj1176】[Balkan2007]Mokia
题目描述: 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数Q<=10000,W<=2000000. 输 ...
- 【bzoj4136】[FJOI2015]带子串包含约束LCS问题
题目描述: 带有子串包含约束的最长公共子序列问题可以具体表述如下. 给定2个长度分别为n和m的序列X和Y,以及一个子串包含约束集S. S中共有k个字符串S={S1,S2,…,Sk},其中字符串Si的长 ...
- sh_03_注释
sh_03_注释 # 这是第一个注释 print("hello hello") """ 这是一个多行注释 .... .... .... 注释结束了 & ...
- vue.js条件渲染 v-if else-if v-for
v-if: 在字符串模板中,如 Handlebars ,我们得像这样写一个条件块: {{#if ok}} <!-- Handlebars 模板 --> <h1>Yes</ ...
- es之java操作插入文档
4方式: . 使用json字符串直接创建 . 使用Map集合 . 使用第三方库来序列化 createDocumentBySerialize . 使用内置的帮助器XContentFactory.json ...
- os.environ.get()的用法
os.environ.get()是python中os模块获取环境变量的一个方法 import os JS_ADDRESS = os.environ.get("PALM_JS_ADDRESS& ...