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 ...
随机推荐
- C#基础知识之Ref Out Params 4种类型的参数
一.按值传递参数 值参数是通过将实参的值复制到形参,来实现按值传递到方法,也就是我们通常说的按值传递. 方法被调用时,CLR做如下操作: 1.在托管栈中为形参分配空间: 2.将实参的值复制到形参. 这 ...
- linux-lampweb
http://www.lampweb.org/linux/2/6.html
- Linux服务器调优
Linux内核参数 http://space.itpub.net/17283404/viewspace-694350 net.ipv4.tcp_syncookies = 表示开启SYN Cookies ...
- vue-element添加修改密码弹窗
1.新建修改密码vue文件CgPwd.vue 代码如下: <template> <!-- 修改密码界面 --> <el-dialog :title="$t('c ...
- Linux相关TCP参数优化: proc/sys/net/ipv4/ 提高web质量
tcp_wmem(3个INTEGER变量): min, default, max min:为TCP socket预留用于发送缓冲的内存最小值.每个tcp socket都可以在建议以后都可以使用它.默认 ...
- Spark--wordcount(词频降序)
import org.apache.spark.{SparkConf, SparkContext} object wc2 { def main(args: Array[String]): Unit = ...
- dnsmasq+Stunnel+sniproxy加密代理
一.环境介绍 [root@kimissVPN ~]# cat /etc/redhat-release CentOS release 6.8 (Final) [root@kimissVPN ~]# un ...
- Python自动化运维技术与最佳实现
第一章 系统基础信息模块详解 系统基础信息采集模块最为监控模块的重要组成部分,能够帮助运维人员了解当前系统的健康程度,同时也是衡量业务的服务质量的依据,比如系统资源吃紧,会直接影响业务的质量以及用户的 ...
- Oracle中的rowid rownum
1. rowid和rownum都是虚列 2. rowid是物理地址,用于定位oracle中具体数据的物理存储位置 3. rownum则是sql的输出结果排序,从下面的例子可以看出其中的区别. rowi ...
- Java框架之MybatisSQL注入漏洞
一.SQL注入漏洞基本原理 在常见的web漏洞中,SQL注入漏洞较为常见,危害也较大.攻击者一旦利用系统中存在的SQL注入漏洞来发起攻击,在条件允许的情况下,不仅可以获取整站数据,还可通过进一步的渗透 ...