Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是while(布尔方法);坏习惯?(示例)_Java - Fatal编程技术网

Java 是while(布尔方法);坏习惯?(示例)

Java 是while(布尔方法);坏习惯?(示例),java,Java,我真的很喜欢这段代码的机制和风格,但是我不知道这段代码风格是合适的还是不好的 public class Test { private static int counter; private final static ArrayList<Object> _objects = new ArrayList<>(); public static void main(String[] args) { //iterate till

我真的很喜欢这段代码的机制和风格,但是我不知道这段代码风格是合适的还是不好的

public class Test 
{
    private static int counter;
    private final static ArrayList<Object> _objects = new ArrayList<>();

    public static void main(String[] args)
    {
        //iterate till you find a valid object randomly
        while (!doStuffIfValid(_objects.get(Rnd.get(_objects.size()))));
    }

    public static boolean doStuffIfValid(Object obj)
    {
        if (++counter > 30)
           return true; //dont try more than 30 times
        // if condition
        // {
        //      //do stuff then exit the caller loop
        //      return true;
        // }
        return false;
    }
}
公共类测试
{
专用静态整数计数器;
私有最终静态ArrayList_objects=新ArrayList();
公共静态void main(字符串[]args)
{
//迭代直到随机找到一个有效对象
而(!dostuffivalid(_objects.get(Rnd.get(_objects.size()))));
}
公共静态布尔值dostuffivalid(对象obj)
{
如果(++计数器>30)
return true;//重试次数不要超过30次
//如果条件
// {
////执行stuff,然后退出调用方循环
//返回true;
// }
返回false;
}
}

答案在于布尔方法。如果该方法过于臃肿且资源繁重;那就不行了

另外,如果您正在随机检查对象,那么最好改为:从列表中删除您知道无效的对象,然后从该列表中随机选择

这样,伪随机化器就不会(偶然地)一次又一次地选择要验证的无效对象;浪费时间/资源


干杯

使用布尔方法作为while循环的条件没有什么错。然而,在循环头中填充循环功能通常是一种不好的做法。这会导致代码难以理解、调试(断点变得不方便)和维护。

中调用布尔方法,而
条件不错;使该方法产生副作用通常是非常困难的。您只需确保在某个点使布尔值为false,否则它将是一个无限循环。基本上,我知道在while中调用方法在java中是正常的,我的问题是,该类的样式是否是一个好的实践,而不是while(方法)本身,如果你注意到我的while循环strange@CodeWhisperer从技术上讲,你不必让这个陈述是假的<代码>while(true){break;}System.out.println(“Foo”)将打印Foo。整洁吗?不太可能,因为第三方在不阅读代码的情况下不知道是什么导致了中断,但从技术上讲它是有效的。