JAVA学习日报

Exception in thread "main" java.lang.Error: Unresolved compilation problem:

    Syntax error on token "" j="", delete this token

    at application1/Number.Second.main(Second.java:11)

报错原因是在第十一行变量与字符串之间忘记加了一个加号。

在计算1+1/2!+1/3!+……1/20!之和时,因为将sum数据类型定义为int型,所以在计算时会损失精度,正确的方法应该是将sum定义为float型

修改代码后发现阶乘temp出现了负数,说明阶乘超过了int的最大表示范围,因此在定义temp阶乘时应当采用long型。而结果仍然是1.0,说明在做1/x! 时当作整型计算了,所以还要加一个强制类型转换。并且得到了正确结果。

但是有一个小问题,阶乘那里即使计算溢出变成了负数,也仍然能得出正确的结果。下面附图:

此外,发现最后几轮循环时sum的值已经不会变了,应该是因为sum是float型,精度有点低,将数据类型改为double,成功解决了该问题。以下附图。

判断俩个值相同的字符串,他们的地址是否相同,暂时未实现。

在编写判断俩个字符串的子串是否相等时遇到了一些问题,我先是生成了俩个String类对象并实例化,然后对俩个字符串进行截取并生成了俩个子串,之后用==判断俩个字符串是否相等,但是出现了相反的结果。如下图所示。

从输出来看,我们发现俩个子串是相等的,但是为什么会输出俩个子串不同呢?

在查阅了一些资料后,发现在构造str1和str2时,在堆中创建了俩个对象,指向并不一样,而==在判断引用数据类型的时候,主要是判断变量指向的对象是否一致。在该代码中俩个原串并不是同一对象,因此子串就==比较并不相等。

但是直接对String类型进行赋值,则发生了一下问题:

按照之前说的,程序编译时会先把str1的内容放入到常量池中,因此生成str2的时候只需要直接从常量池中引用即可,并不需要重新创建对象。因此二者指向的是同一个对象,但是结果仍然输出俩个字符串的子串并不相等。于是继续查看帖子,得出substring的返回值并不会放入到常量池中的结论,俩个子串指向的并不是同一个对象,因此用==号比较时返回不相等。正确的做法其实就是调用equals方法,直接比较内容是否相等。

java 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值