算法技巧记录(java)

文章介绍了Java编程中处理数字时的格式化技巧,如DecimalFormat的使用,保留小数位数以及如何处理非小数输入。同时讲解了如何通过Pattern和Matcher类进行字符处理,提取字符串中的数字,并展示了Math库中常用的方法,如绝对值、最大值/最小值计算、随机数生成和数学运算等。
摘要由CSDN通过智能技术生成

1.保留小数点几位,并且四舍五入。。

double num=1.43239;
DecimalFormat df = new DecimalFormat("#.####");
System.out.println(df.format(num));

输出1.4324

但是如果num中不是小数或像1.0,1,1.00000都不会保留小数点后几位只会输出1。

但是如果题目要求是要补全0 的时候就比较行营见拙了。

与是就可以用0来占位

double num=0.234;
DecimalFormat df = new DecimalFormat("#0.0000");
df.format(num);

一般的形式都是#0.0000。小数点前面的0是为了防止像上述例子的0.234这样的如果用#.0000,这样是不行的,会变成.234不过大于1的话就没事了,但是大家还是尽量用#0.0000。

0和#的作用:

  • #:表示可选的数字。如果数字存在,则显示该数字;如果数字不存在,则不显示。
  • 0:表示必须的数字。如果数字存在,则显示该数字;如果数字不存在,则显示0。

2.字符处理。。

简单处理

当题目的输入是一个字符串的时候,然后中间夹杂着一些数字,那么如何提取数字需要用到一些技巧了。

如果题目的读取只需要读取单个的数字那是比较简单的,

使用String s=sc.next();

然后用s.charAt();或者s.toCharArray()转换成数组用索引就可以读出来

然后再转成int 的时候注意一下-48就行

例如:”1“转1 int a="1"-48    为什么要减去48 自己去查ASCII码,

现有输入:2x^2-3 由于题目要用到其中数字,你要把它取出来。求方法。

其实你简单想想用charAt其实就可以取出来例子中的2,3,但是你有没有想到万一其中的数字是两位?三位?这样你去出来不是还要处理过那不是未尝麻烦,加上我们薄弱的编程基础,想想就头疼。

pattern和matcher类

所以贴心的Java当然会给我们准备好类啦;;

String input = sc.next();
Pattern pattern = Pattern.compile("\\d+"); // 匹配一个或多个数字
Matcher matcher = pattern.matcher(input);
int [] a=new int [10];
int  num1=0;
while (matcher.find()) {
    a[num1]=Integer.parseInt(matcher.group());
    num1++;
}

我们使用了Java的正则表达式库来匹配一个或多个数字。在上面的代码中,我们使用了Pattern类和Matcher类来定义正则表达式和执行匹配操作

其实这两个类中的东西挺多的有些也挺好用,但是一般比赛的时候也用不到可以自己查出来参考一下。

在这里使用了一个强制类型转换,Integer.parseInt()将matcher.group()返回的String类型转换成int类型

再此科普一下正则表达式:

正则表达式(Regular Expression,简称regex)是一种用于匹配字符串中特定模式的模式匹配工具。通过使用正则表达式,可以方便地查找、匹配或替换文本中的模式。

正则表达式由一系列字符组成,其中一些字符具有特殊含义,如 .*?|[ ]^$ 等。这些特殊字符用于定义要匹配的模式。

下面是一些正则表达式的示例:

  1. 匹配所有数字:\d+
  2. 匹配所有字母:[a-zA-Z]+
  3. 匹配所有空白字符:\s+
  4. 匹配以特定字符开头的字符串:^a
  5. 匹配以特定字符结尾的字符串:a$
  6. 匹配包含特定字符的字符串:a.b
  7. 匹配不包含特定字符的字符串:[^a]
  8. 匹配重复的字符:a{3}(匹配三个连续的a)
  9. 匹配任意的单个字符:.
  10. 匹配可选的字符:a?(匹配0个或1个a)

这只是正则表达式的一些基本示例,实际上正则表达式的功能非常强大,可以用来处理复杂的文本模式匹配和替换操作。

其实就可以简单理解成字符串了,一般不出太邪乎的东西这个都可以把数字取出来的

3.Java中的math库的运用:

Math库中其实有很多的方法是很有用也是经常用到的方法

再次例举一下:

Math.abs();

这个是绝对值,里面支持int ,long,float,double类

Math.max()

Math.min()

显而易见是曲最大值和最小值的,支持int ,long,float,double类

Math.random()

返回一个伪随机数,其值在0.0(包括)和1.0(不包括)之间。

Math.round(a)

将a四舍五入为最接近的整数。可以float和double-->long 

Math.sqrt(double a)

平方根

Math.pow(double a, double b)

计算a的b次幂

除此之外,还有很多有关三角函数的,那些一般很少用到;;

后续还有再补!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值