版权声明:本文为博主原创文章,请在转载时说明出处。 https://blog.csdn.net/jackfrued/article/details/26163877

任务:相同在上一家公司。公司还须要一个程序来找出当月工资最高的员工(高富帅)和当月工资最低的员工(屌丝)。

我们先定义一个类描写叙述员工(Employee)。为员工拟定姓名(name)和工资(salary)两个属性。

Java是一个面向对象的编程语言,员工是对象。我们把员工共同的属性和行为抽取出来,就能够定义出员工类。

定义一个类的过程就是一个抽象的过程,我们要做两种抽象:数据抽象(定义对象的属性)和行为抽象(定义对象的方法)。从问题中抽取出类的方法事实上非常easy。就是找名词和动词,名词会成为类或者类中的属性。动词会成为类中的方法。

package com.lovo;

/**
* 员工类
* @author 骆昊
*/
public class Employee {
private String name; // 员工姓名
private double salary; // 员工工资 /**
* 构造器
* @param name 姓名
* @param salary 工资
*/
public Employee(String name, double salary) {
this.name = name;
this.salary = salary;
} /**
* 获取员工姓名
* @return 姓名
*/
public String getName() {
return name;
} /**
* 获取员工工资
* @return 工资
*/
public double getSalary() {
return salary;
} public String toString() {
return name + " : " + salary;
}
}

接下来我们用随机的方式创建员工并指定其工资并找出高富帅和屌丝。

package com.lovo;

public class MaxMin {

	/**
* 查找最高工资的员工
* @param es 装全部员工的数组
* @return 最高工资的员工
*/
public static Employee findMax(Employee[] es) {
Employee max = es[0]; // 假设第一个员工就是工资最高的员工
// 从第二个员工開始找比高富帅工资更高的员工
for(int i = 1; i < es.length; i++) {
// 比当前的高富帅工资更高就是新的高富帅
if(es[i].getSalary() > max.getSalary()) {
max = es[i];
}
}
return max;
} /**
* 查找最低工资的员工
* @param es 装全部员工的数组
* @return 最低工资的员工
*/
public static Employee findMin(Employee[] es) {
Employee min = es[0]; // 假设第一个员工就是工资最低的员工
for(int i = 1; i < es.length; i++) {
// 比当前的屌丝工资更低就是新的屌丝
if(es[i].getSalary() < min.getSalary()) {
min = es[i];
}
}
return min;
} public static void main(String[] args) {
// 用一个字符串数组保存员工的姓名
String[] names = {"赵云", "黄忠", "典韦", "许褚", "张飞", "马超", "曹仁", "甘宁"};
// 创建一个数组保存全部员工并用1000-5000的随机数作为员工工资
Employee[] emps = new Employee[names.length];
for(int i = 0; i < emps.length; i++) {
int salary = (int) (Math.random() * 4001 + 1000);
emps[i] = new Employee(names[i], salary);
System.out.println(emps[i]); // 在控制台打印员工信息(调用toString()方法)
}
Employee wealthy = findMax(emps); // 高富帅
Employee cockwire = findMin(emps); // 屌丝
System.out.println("[高富帅]\t" + wealthy);
System.out.println("[屌丝]\t" + cockwire);
}
}

事实上大家可能注意到了。上面代码中的findMax和findMin方法的代码事实上非常相似,明显。这两个方法是能够合并为一个方法的,请大家自己思考:)

在Java中数组也是对象类型。所谓数组就是一个存储数据的仓库,它包括了若干个仓位。编号从0開始。创建数组的时候能够用静态初始化的方式(如上面样例中员工名字的数组),也能够用new运算符并指定数组中元素的个数(names.length)。

在创建数组对象后,能够通过数组对象的length属性获取数组中元素的个数。

数组能够通过下标运算[]来操作数组中的元素,下标的范围是0到数组的length-1。通常能够用循环来控制数组的下标并操作数组元素。

假设数组中的每一个元素又是数组。那么能够将其称之为二维数组,二维数组非常像我们平时使用的表格(table),有若干行若干列来存储数据。也非常像数学中的矩阵(matrix)。除此之外。2D游戏中的地图也能够用二维数组来表示。国际象棋、五子棋等棋类游戏的棋盘也能够用二维数组来表示。以下是一个用二维数组生成10行杨辉三角的样例,杨辉三角例如以下所看到的。当中每行的数字就是二项式从0次方到N次方的展开系数。

1

1  1

1  2  1

1  3  3  1

1  4  6  4  1

... ... ... ... ... ...

package com.lovo;

public class YangHuiTriangle {

	public static void main(String[] args) {
int[][] array = new int[10][];
for(int i = 0; i < array.length; i++) {
array[i] = new int[i + 1];
for(int j = 0; j < array[i].length; j++) {
if(j == 0 || j == i) { // 元素在对角线上或在第一列就是1
array[i][j] = 1;
}
else { // 其它位置的元素是它上一行的元素加上上一行前一列的元素的和
array[i][j] = array[i - 1][j] + array[i - 1][j - 1];
}
System.out.print(array[i][j] + "\t");
}
System.out.println();
}
}
}

关于数组。另一个重要的应用就是排序。尽管Java API(应用程序编程接口)中的Arrays类提供了排序的sort()方法,可是以下的代码还是用一种尽管算不上有效率可是仍然非常经典的冒泡排序实现数组元素的从小到大(升序)排序。

冒泡排序的原理是:对数组中的元素进行两两比較,假设前面的元素比后面的元素大,那么就交换两个元素。这样一趟下来最大的元素就被移动到数组的末尾。再进行第二趟,将第二大的元素放到倒数第二个位置。这样。大的沉下去小的浮起来。这就是冒泡排序。

package com.lovo;

public class Bubble {

	public static void bubbleSort(int[] array) {
boolean swapped = true; // 是否发生了元素交换的布尔值(假设为false表示没有元素交换则排序完毕)
for(int i = 1; swapped && i <= array.length - 1; i++) {
swapped = false;
for(int j = 0; j < array.length - i; j++) {
if(array[j] > array[j + 1]) { // 前面的元素大于后面的元素就交换两个元素
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
swapped = true;
}
}
}
} public static void main(String[] args) {
int[] x = new int[10];
System.out.println("排序前: ");
for(int i = 0; i < x.length; i++) {
x[i] = (int) (Math.random() * 100); // 为数组元素赋上0-99的随机值
System.out.print(x[i] + " ");
}
bubbleSort(x);
System.out.println("\n排序后: ");
for(int y : x) { // 用for-each循环打印数组中的元素
System.out.print(y + " ");
}
}
}

[连载]Java程序设计(03)---任务驱动方式:寻找高富帅和屌丝的更多相关文章

  1. [连载]Java程序设计(04)---任务驱动的方法:工资结算系统

    任务:或在公司,该公司将其分为三类人员:部门经理.销售员.在发工资的时候,部门经理拿固定月薪8000元.技术人员按每小时100元领取月薪.销售人员依照500元底薪加当月销售额的4%进行提成.设计并实现 ...

  2. 20145218 《Java程序设计》第03次实验报告

    北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.22 实验名称:敏捷开发与XP实践 一.实验内容 XP基础 XP核心实践 相 ...

  3. 20172319 2018.03.27-04.05 《Java程序设计》第4周学习总结

    20172319 2018.03.27-04.05 <Java程序设计>第4周学习总结 教材学习内容总结 第四章 编写类 类与对象的回顾:对象是有状态的,状态由对象的属性值确定.属性由类中 ...

  4. 20145219 《Java程序设计》第03周学习总结

    20145219 <Java程序设计>第03周学习总结 教材学习内容总结 基本类型和类类型 基本类型:第三章中讲述的那几种,short.long.int.byte.double.char. ...

  5. Java笔记4:JDBC纯驱动方式连接Oracle

    JDBC纯驱动方式连接Oracle 1 下载Oracle提供的驱动程序包 下载地址: http://www.oracle.com/technetwork/database/enterprise-edi ...

  6. jdbc 03:注册驱动的方式

    jdbc连接mysql时,注册驱动的方式 package com.examples.jdbc.o3_注册驱动方式; //mysql驱动所在的包 import com.mysql.jdbc.Driver ...

  7. 2016-2017-2 《Java程序设计》预备作业2总结

    2016-2017-2 <Java程序设计>预备作业2总结 古希腊学者普罗塔戈说过:「头脑不是一个要被填满的容器,而是一束需要被点燃的火把.」 在对计算机系的学生情况的调查中,我说: 最近 ...

  8. 20145212 《Java程序设计》第9周学习总结

    20145212 <Java程序设计>第9周学习总结 教材学习内容总结 一.JDBC架构 1.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插 ...

  9. 20172319 《Java程序设计教程》第8周学习总结

    20172319 2018.04.24-05.03 <Java程序设计教程>第8周学习总结 目录 教材学习内容总结 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考 ...

随机推荐

  1. 五分钟看懂Celery定时任务

    Django下使用Celery 使用场景: 1, Web应用. 当用户触发的一个操作需要很长时间才能执行完成,那么就可以把它当做一个任务去交给Celery去异步执行, 执行完成之后再返回给用户,这短时 ...

  2. python-day36--并发编程之多线程

    十三.死锁.递归锁 1.所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永 ...

  3. 检测Linux glibc幽灵漏洞和修补漏洞

    1.首先安装rpm : sudo apt-get install rpm   wget -OGHOST-test.sh http://www.antian365.com/lab/linux0day/G ...

  4. 写入CSS的3种方式

    CSS能让网页制作者有效的定制.改善网页的效果. CSS是对HTML的补充(网页设计师曾经为无法很好的控制页面的显示效果而倍感苦恼,CSS的出现解决了这个问题) CSS实现了网页内容和页面效果的彻底分 ...

  5. Oracle12c中性能优化&amp;功能增强新特性之全局索引DROP和TRUNCATE 分区的异步维护

    Oracle 12c中,通过延迟相关索引的维护可以优化某些DROP和TRUNCATE分区命令的性能,同时,保持全局索引为有效. 1.   设置 下面的例子演示带全局索引的表创建和加载数据的过程. -- ...

  6. PHP 的 HTTP 认证机制

    PHP 的 HTTP 认证机制仅在 PHP 以 Apache 模块方式运行时才有效,因此该功能不适用于 CGI 版本.在 Apache 模块的 PHP 脚本中,可以用 header()函数来向客户端浏 ...

  7. angularjs 中的scope继承关系——(2)

    转自:http://www.lovelucy.info/understanding-scopes-in-angularjs.html angularjs 中的scope继承关系 ng-include ...

  8. STM 软件事务内存——本质是为提高并发,通过事务来管理内存的读写访问以避免锁的使用

    对Java程序员来说,我们对面向对象的编程(OOP)自然都是烂熟于胸的,但语言也极大地影响了我们构建面向对象应用程序的方式.(现在的OOP已经和Alan Kay当初创造这个词时候的初衷大不相同了,他的 ...

  9. SQL基础用法(实例二)

    /* 2006年10月01日 SQL Server 数据库的高级操作 (1) 批处理 (2) 变量 (3) 逻辑控制 (4) 视图 (5) 函数 (6) 高级查询 */ ()批处理 将多条SQL语句作 ...

  10. bacula备份终端操作bconsole指令

    1.list命令列出各种备份状态信息   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 list Jobs     #列出所有备份记录状态 list jobid= ...