|
|
51CTO旗下网站
|
|
移动端

15.1 基础编程试题(4)

《Java程序员面试宝典》第15章将包含关于Java算法和开发模式一些常见面试题,并且分析这些题目和知识点,帮助读者梳理这些方面的知识。本节说的是基础编程试题。

作者:杨磊 等编著来源:清华大学出版社|2010-09-06 15:37

面试题165  将某个时间以固定格式转化成字符串

时间的表现方式有多种多样,可以只显示年、月、日,可以只显示时分秒,可以用-分割年月日数据,可以用冒号:分割时、分、秒等。那么Java中,应该如何来格式化日期格式呢?本例在回答该问题的同时,详细地讲解Java对日期格式的数据的处理方式和SimpleDateFormat的使用方法。

【出现频率】 ★★★★

【关键考点】

Java的日期数据的存储原理;

SimpleDateFormat的使用方法。

【考题分析】

大家知道,日期数据用java.util.Date类型来表示,它默认的字符串格式一般不能满足开发需求。但是,面对纷繁乱杂的各种表示日期和时间格式的时候,如果每一个都需要开发者手动的去拼凑字符串来得到的话,是非常麻烦的。那么,JDK中是否已经有一个比较成熟的表示日期格式的工具类呢?答案就是java.text.SimpleDateFormat类。

SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。它本身就代表了一种字符格式的时间数据,在创建SimpleDateFormat对象的时候,开发者需要提供一种格式,例如下面的代码:

  1. new SimpleDateFormat(yyyy-MM-dd HH:mm:ss); 

利用以上的SimpleDateFormat对象就可以打印出它所代表格式的时间字符串:xxx年-xx月-xx日 xx小时:xx分钟:xx秒,例如下面的代码:

  1. 2009-11-11 11:11:11 

以上的结果为:2009年11月11日,11时11分11秒。那么,这些样式应该如何表示呢?它们的表示有什么特殊的规定吗?其实,SimpleDateFormat定义了一些比较特殊的表示字符,用来为时间数据作为占位符,如以上代码中的yyyy、HH等,15.1列出了一些常用的标示符及其含义。

表15.1  SimpleDateFormat常用匹配字符含义及使用简介

   

日期或时间元素

   

   

y

Year

09,2009

M

年份中的月

Month

July,11,12

w

年份中的周

Number

27

W

月份中的周

Number

2

D

年分中的天

Number

365

d

月份中的天

Number

31

H

一天中的小时(0-23

Number

23

m

小时中的分钟

Number

59

s

分钟中的秒

Number

59

S

秒中的毫秒

Number

888

针对本题目,首先用特定的格式字符创建一个SimpleDateFormat对象,然后调用SimpleDateFormat的format()方法即可,方法的参数即为Date型对象,例如下面的代码:

  1. //定义字符串的格式  
  2. SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);  
  3. String str = sdf.format(date);//进行格式化,并得到字符串 

说明:以上示例代码的格式只是一个简单的展示,读者完全可以根据自己的需要定制不同的日期和时间样式。

【答案】

以下为本题目的参考实现:

  1. package ch15;  
  2. import java.text.SimpleDateFormat;  
  3. import java.util.Date;  
  4. public class DateFormat {  
  5. // 主方法  
  6. public static void main(String[] args) {  
  7. Date now = new Date();  //得到现在的时间  
  8. System.out.println(date2FormatStr(now));//打印现在时间的字符串格式  
  9. }  
  10. // 得到固定字符串格式的方法  
  11. public static String date2FormatStr(Date date) {  
  12. //定义字符串的格式  
  13. SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);  
  14. String str = sdf.format(date);  //进行格式化,并得到字符串  
  15. return str;  //返回结果  
  16. }  
  17.  

面试题166  用Java实现一个冒泡排序算法

排序是一种比较经典的算法考察题目,而冒泡排序是一种常用的易理解的排序算法,也应该算开发者需要具备的基本技能之一。本例在回答该问题的同时,详细地讲解冒泡排序的原理和实现方式。

【出现频率】 ★★★★

【关键考点】

冒泡排序算法;

编程实践能力。

【考题分析】

冒泡(Bubble)排序的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第2个数中得到一个新的最大数。如此下去,直至最终完成排序。由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。

在编程实现中,一般用二重循环实现,外循环变量设为i,内循环变量设为j。外循环重复n次,内循环依次重复n-1,n-2,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,n,对于每一个i,j的值依次为1,2,...,n-i,例如下面的代码:

  1. for (int i = 0; i < arrys.length; i++) {  
  2. for (int j = 0; j < arrys.length - i - 1; j++) {  
  3. if (arrys[j] > arrys[j + 1]) {//判断当前数字与后面数字的大小  
  4. //把大数放后边  
  5. }  
  6. }  

说明:如果是降序排列,则是把小数放在后面。

【答案】

以下是该题目的编程示例:

  1. package ch15;  
  2. public class MaoPaoSort {  
  3. // 主方法  
  4. public static void main(String[] args) {  
  5. int[] arr = { 35718119 };//定义数组  
  6. maopaoSort(arr);//开始排序  
  7. }  
  8. //排序方法  
  9. public static void maopaoSort(int[] arrys) {  
  10. //定义临时变量temp  
  11. int temp = 0;  
  12. //用j为下标,遍历数组  
  13. for (int j = 0; j < arrys.length; j++) {  
  14. //对于每一个数组元素,从0到还未来排序的最大下标,总是把最大的数字放  
  15. 在后面  
  16. for (int k = 0; k < arrys.length - j - 1; k++) {  
  17. if (arrys[k] > arrys[k + 1]) {//判断当前数字与后面数字的大小  
  18. temp = arrys[k];  
  19. arrys[k] = arrys[k + 1];  
  20. arrys[k + 1] = temp;//用temp变量进行换值  
  21. }  
  22. }  
  23. }  
  24. maopaoPrint(arrys);//打印  
  25. }  
  26. //打印方法  
  27. public static void maopaoPrint(int[] before) {  
  28. for (int i = 0; i < before.length; i++) {//遍历  
  29. System.out.print(before[i] +  );//打印,以空格隔开  
  30. }  
  31. System.out.println();//换行  
  32. }  
【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

Jenkins Pipeline可持续化集成

Jenkins Pipeline可持续化集成

优化运维流水线
共3章 | youerning

82人订阅学习

笑熬浆糊之职场那些事

笑熬浆糊之职场那些事

IT人的职场心法
共22章 | Bear_Boss

66人订阅学习

Redis运维秘籍

Redis运维秘籍

运维标配技术
共15章 | one叶孤舟

146人订阅学习

读 书 +更多

C#和.NET核心技术

本书重点讲解如何用实用的代码来解决具体的实际问题。本书的内容覆盖面很广,从新的C#范型到Web服务,从反射到安全等都有涉及。系统地介绍...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客