You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在for循环中使用三元运算符控制遍历方向?

解决Java中用布尔值控制for循环遍历方向的问题

嘿,我明白你想通过三元运算符简化代码、避免重复写两个for循环的想法,咱们先看看你那两种写法为啥报错,再给你个靠谱的解决方案。

为啥你的写法会报错?

  1. 第一种写法:

    for (hotbarFirst ? (x = 0; x < mc.player.inventoryContainer.getInventory().size(); x++) : (x = mc.player.inventoryContainer.getInventory().size(); x > 0; x--)) {
    

    Java的for循环语法要求三个部分(初始化、条件判断、增量)是独立的语句/表达式,你把这三个部分整个用三元运算符包裹,相当于试图把一个复合语句当成表达式返回,这完全不符合Java的语法规则,所以会报unexpected token错误。

  2. 第二种写法:

    for (hotbarFirst ? (x = 0) : (x = mc.player.inventoryContainer.getInventory().size()); hotbarFirst ? (x < mc.player.inventoryContainer.getInventory().size()) : (x > 0); hotbarFirst ? (x++) : (x--)){ }
    

    这里的问题主要在增量部分:hotbarFirst ? (x++) : (x--)虽然是合法表达式,但Java的for循环第三部分需要是一个语句(statement),而不是单纯的表达式。这种三元表达式的写法会被编译器判定为不符合语句要求,所以报not a statement错误。

正确的实现方式

其实不用纠结在for循环里硬塞三元运算符,我们可以提前用三元确定遍历的起始值、终止条件和步长,这样代码更清晰,也完全符合语法:

public static int getItem(Item itemofChoice, boolean hotbarFirst) {
    if (mc.player == null) return -1;
    
    // 先获取 inventory 的大小,避免重复调用方法提升性能
    int inventorySize = mc.player.inventoryContainer.getInventory().size();
    // 根据 hotbarFirst 确定遍历的起始、终止和步长
    int start = hotbarFirst ? inventorySize - 1 : 0;
    int end = hotbarFirst ? -1 : inventorySize;
    int step = hotbarFirst ? -1 : 1;
    
    for (int x = start; (hotbarFirst ? x > end : x < end); x += step) {
        // 跳过不需要检查的槽位
        if (x == 0 || (x >= 5 && x <= 8)) continue;
        
        ItemStack s = mc.player.inventoryContainer.getInventory().get(x);
        if (s.isEmpty()) continue;
        if (s.getItem().equals(itemofChoice)) return x;
    }
    return -1;
}

额外优化点

  • 把inventorySize提前存下来,避免每次循环都调用getInventory().size(),减少方法调用开销;
  • 把跳过槽位的判断x == 0 || x == 5 || x == 6 || x == 7 || x == 8简化成x == 0 || (x >=5 && x <=8),逻辑更清晰。

这样写既不用写两个重复的for循环,也完全符合Java语法,还能根据hotbarFirst的布尔值灵活控制遍历方向~

内容的提问来源于stack exchange,提问作者Arthur TeaTree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:56:27