gpt4 book ai didi

java - 如果语句为 false 时运行

转载 作者:行者123 更新时间:2023-12-01 18:07:36 27 4
gpt4 key购买 nike

我正在尝试用 Java 为游戏编写一些代码,但是其中一个 if 语句未按预期工作。

if(player.gety() < y+row*tileSize){
player.draw(g);
System.out.println("Row: " + y+row*tileSize);
System.out.println("Player: " + player.gety());
}

运行此代码时,我收到的输出是:

Player: 200
Row: -79.99999999968651320
Player: 200
Row: -79.99999999968651320
Player: 200
Row: -79.99999999968651320

这没有多大意义,因为 player.gety() 明显大于 y+row*tileSize。有什么原因会导致这种情况发生吗?

最佳答案

字符串连接是让你陷入困境的原因。具体来说,

"Row:    " + y+row*tileSize

不一样
"Row:    " + (y+row*tileSize)

在第一种情况下,您会得到

("Row:    " + y)+ (row*tileSize)

其中 y 被转换为其字符串表示形式并连接到 "Row: ",然后 row *tileSize 的乘积为转换为其字符串表示形式并连接到该表示形式上。

在第二种情况下,您将获得 (y + row *tileSize),这是一个单个数值,然后将其转换为字符串表示形式并连接到字符串 “行::”

这实际上是按照规范要求的。当+运算符的任一操作数是字符串时,它不再意味着“加法”,而是意味着“串联”,并且串联不遵守优先级算术规则。相反,它贪婪地将另一个操作数强制为 String 值并将两者放在一起。

正如您所发现的,这可能会产生一些意想不到的结果。尝试按照上面的建议添加括号,或者单独打印出变量的值:

System.out.println("y = "+ y + " row  = "+row + " tileSize = " + tileSize)

这样就可以更容易地看到发生了什么。

编辑:我希望您会发现更有可能的是,y = -79.999999999(即-79.9,重复)和 row*tileSize=68651320。将这些加起来,您得到的数字远远超过 200。

关于java - 如果语句为 false 时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35146434/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com