【问题标题】:Boolean won't change even if the condition is met即使满足条件,布尔值也不会改变
【发布时间】:2013-11-13 22:08:44
【问题描述】:

以下方法将Member 类型的对象添加到数组中:

public boolean addMember(Member m) {
    boolean result = false;
        for(int i = 0; i < members.length; i++){
            if(members[i] == null){


                members[i] = m;
                result = true;
            }
        }


    return result;
}

如您所见,如果当前位置为空,我也会返回一个布尔结果。问题是,即使满足条件 - 添加对象,它显示它没有问题 - 结果布尔值始终保持为假。为什么?我怎样才能改变它?

【问题讨论】:

  • 你为什么使用数组而不是 List 甚至 Set
  • 其次,使用列表。
  • 另外,您这样做的方式不会在第一个空位置添加元素,而是用它填充整个数组,因为您不会跳出循环。
  • 你需要一个break :-)
  • @m0skit0 我认为 OP 的问题是它从未返回 true,即循环从未运行/数组 oO 中没有空值

标签: java arrays boolean


【解决方案1】:

可能没有添加任何内容。开始时它可能不是 null,因此循环永远不会运行,这就是布尔值在完成时为 false 的原因。

实际上,这似乎是正确的行为,因为如果成员数组中没有空空间,则新元素不会覆盖现有元素,因此此处为 false 是正确的。

【讨论】:

    【解决方案2】:

    你需要一个break

    public boolean addMember(Member m) {
        boolean result = false;
    
        for (int i = 0; i < members.length; i++) {
            if (members[i] == null) {
                members[i] = m;
                result = true;
                break;
            }
        }
    
        return result;
    }
    

    或者事件更好,不需要标志:

    public boolean addMember(Member m) {
        for (int i = 0; i < members.length; i++) {
            if (members[i] == null) {
                members[i] = m;
                return true;
            }
        }
    
        return false;
    }
    

    【讨论】:

    • @samoz 不,它确实改变了逻辑。
    • @samoz 使用这个逻辑,在找到第一个 null 后,成员的值不会更改。
    • @samoz 当然,它修复了“多次存储”错误。然而,这可能不是所描述行为的真正原因。
    猜你喜欢
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    相关资源
    最近更新 更多