吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1261|回复: 9
收起左侧

[求助] 求Java大佬们帮我看看这个问题xx

[复制链接]
Kotaira 发表于 2020-5-26 13:15
本帖最后由 Kotaira 于 2020-5-26 14:02 编辑

image.png
就是我注释掉的那行和它下面那行...注释掉的是正确的,下面那行只是调整了一下顺序,为什么就错了呢?
是我对Java理解不到位还是编译器的问题...

补一张局部大图:
image.png


=============
谢谢好兄弟们了, 我现在反应过来了,顺序还真不能变,要不然就是先越界,后判断是否越界.

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

asatmda 发表于 2020-5-26 13:39
这个是你算法的问题,和java本身没有关系。搞acm就是这样,你想的和出题人想的不一定一下子就合上了。
头像被屏蔽
jhchengzijiang 发表于 2020-5-26 13:42
lytalyt 发表于 2020-5-26 13:43
left < nums.length这个判断是为了保证不越界,你注释掉的那行里,当left == nums.length的时候,整个表达式的值肯定是false,所以&&后面的条件就不会执行了,这属于jvm的优化。但是你如果把left < nums.length的判断放在后面,那么jvm就会先判断nums[left] == nums[left - 1]的结果,自然就越界了。PS:这是leetcode里三数之和的那个题吧
ben_29 发表于 2020-5-26 13:48
判断越界在前面,后面的条件就没执行了,调换了顺序之后先越界了
知心 发表于 2020-5-26 13:52
&& 成双成对出现的是短路运算符。一旦前半截运算的结果可以确认整个运算式的结果就不继续计算了。同真为真,有假为假
 楼主| Kotaira 发表于 2020-5-26 14:03
lytalyt 发表于 2020-5-26 13:43
left < nums.length这个判断是为了保证不越界,你注释掉的那行里,当left == nums.length的时候,整个表达 ...

哈哈哈, 确实, 刷b站看到有up用这个 ,心血来潮了
 楼主| Kotaira 发表于 2020-5-26 14:06
知心 发表于 2020-5-26 13:52
&& 成双成对出现的是短路运算符。一旦前半截运算的结果可以确认整个运算式的结果就不继续计算了。同真为真 ...

现在明白了好兄弟, 当时短路与,逻辑与都试过,愣是没看出来我写的这个先越界,后判断是否越界.好蠢啊
 楼主| Kotaira 发表于 2020-5-26 14:07
jhchengzijiang 发表于 2020-5-26 13:42
这不是&&,如果前面的错了,后面自动忽略不判断
像判断对象属性是否为空,你得先判断对象是否为空 && 属性 ...

谢谢好兄弟了 ,现在懂了
 楼主| Kotaira 发表于 2020-5-26 14:09
ben_29 发表于 2020-5-26 13:48
判断越界在前面,后面的条件就没执行了,调换了顺序之后先越界了

谢谢好兄弟, 明白了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 16:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表