[阶段一]Java基础类库(2)
来源:互联网 发布:java 参数null 编辑:程序博客网 时间:2024/05/21 12:46
课程内容
延续上次课的内容,今天继续讲Java基础类库。课程内容如下:
- StringBuffer——修改、插入、删除字符串,性能要优于String,并且线程安全,常常用于多线程里面
- StringBuilder——接口与StringBuilder的兼容,性能要优于StringBuffer,线程不安全,常常在单线程中使用
- Random——生成随机数,注意里面的随机种子概念
- BigDecimal——用于精确计算,防止精度丢失
看似简单的几个常用类,里面的细节还是很多的,例如使用BigDecimal的时候构造器的使用,如果是使用new BigDecimal(0.05),它依然存在精度丢失的问题。我们应该选择使用new BigDecimal(“0.05”)或者BigDecimal.valueOf(0.01) 进行初始化。
课堂作业
作业一:设计一个工具类(通用),实现两个double类型数据的加减乘除运算。
要求:传入double类型数据,返回结果也是精确的double
类名:ArithUtils (推荐类名)
提醒:对于除法运算,需要考虑四舍五入问题
package com.mashen.decimal;import java.math.BigDecimal;/** * 用于计算两个double类型数值 的精确结果的工具类 * @author tonyyls * @version v1.0 * */public class ArithUtils { //默认除法运算精度 private static final int DIV_SCALE=5; //构造函数私有,让这个类不能实例化 private ArithUtils(){} //提供精确的加法运算 public static double add(double d1,double d2){ BigDecimal b1=BigDecimal.valueOf(d1); BigDecimal b2=BigDecimal.valueOf(d2); return (b1.add(b2)).doubleValue(); } //提供精确的减法运算 public static double subtract(double d1,double d2){ BigDecimal b1=BigDecimal.valueOf(d1); BigDecimal b2=BigDecimal.valueOf(d2); return b1.subtract(b2).doubleValue(); } //提供精确的乘法运算 public static double multiply(double d1,double d2){ BigDecimal b1=BigDecimal.valueOf(d1); BigDecimal b2=BigDecimal.valueOf(d2); return b1.multiply(b2).doubleValue(); } //提供精确的除法运算 public static double divide(double d1,double d2,int scale){ BigDecimal b1=BigDecimal.valueOf(d1); BigDecimal b2=BigDecimal.valueOf(d2); return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue(); } //提供精确的除法运算,允许传入精度 public static double divide(double d1,double d2){ BigDecimal b1=BigDecimal.valueOf(d1); BigDecimal b2=BigDecimal.valueOf(d2); return b1.divide(b2,DIV_SCALE,BigDecimal.ROUND_HALF_UP).doubleValue(); }}
调用方式:
public static void main(String[] args) { double d1=0.03; double d2=0.01; System.out.println("0.03+0.01="+ArithUtils.add(d1,d2)); System.out.println("0.03-0.01="+ArithUtils.subtract(d1,d2)); System.out.println("0.03*0.01="+ArithUtils.multiply(d1,d2)); System.out.println("0.03/0.01="+ArithUtils.divide(d1,d2,2)); }
作业二:按照office word的标准字数统计方式,计算含有中文的字符串的实际长度(字符串长度)。
注意:字符串里面可能包含数字,汉字,特殊字符
规则:1个汉字长度是2,其他字符均计算为1
补充:这题目有点模糊,首先office 不同版本可能存在不同计算方式,另外WPS 和 office的计算方式不同。所以题目修改为:计算带有中文的字符串的实际长度。
package com.mashen.zhengze;public class AnalizeChinese { //计算带有中文的字符串的长度 public static int calStringLength(String text) { // 使用正则表达式匹配汉字 String reg = "^[\u4e00-\u9fa5]{1}$"; int result = 0; //匹配每一个字符是否是汉字,汉字则长度为2,英文或者其它字符 为1 for (int i = 0; i < text.length(); i++) { String b = Character.toString(text.charAt(i)); if (b.matches(reg)){ result+=2; }else { result+=1; } } return result; } public static void main(String[] args) { String text = "我在码神上课_励志成为伟大的Android工程师~"; System.out.println(calStringLength(text)); }}
课件
统一在上一篇文章中提供
1 0
- [阶段一]Java基础类库(2)
- [阶段一]Java基础类库(1)
- [阶段一]Java基础语法-数据类型(2)
- [阶段一]Java面向对象(2)
- [阶段一]java基础编程比赛
- [阶段一]Java基础语法-数据类型(1)
- [阶段一]Java基础语法-数据类型(3)
- Java基础阶段总结
- java基础阶段总结
- java基础阶段总结
- Java基础阶段总结
- Java基础阶段总结
- Java基础阶段总结
- [阶段一]Java面向对象(1)
- [阶段一]Java面向对象(3)
- [阶段一]Java面向对象(4)
- [阶段一]Java多线程
- Java基础与数据库对应数据--Java基础2阶段
- 第44课:Spark Streaming之Spark内核回顾思考
- 【编程马拉松】【027-最短编辑距离】
- ubuntu下安装PostgreSQL笔记
- 对于文本与字符串之间的区别?
- 菜鸟之判断输入的是不是qq号的方法!
- [阶段一]Java基础类库(2)
- open-ble.org开源蓝牙ble-1_DA14580初级入门教程4:官方SDK教程
- Ubuntu 14.04/14.10下安装VMware Workstation 11图文教程
- 【NOIP2016提高组A组7.16】第三条跑道
- ubuntu14.04安装http代理squid并设置用户名和密码
- TELNET “no router to host”错误问题解决
- 【Android 基础】反编译工具介绍-【Jadx 大法好】
- [cogs 2190]花样游戏
- 【9401】斐波那契数列