java - do while循环设计有设计问题

标签 java while-loop quicksort partition do-loops

对于我的方法,分区,对于我的快速排序,我运行的时候是没问题的。但是,每当我在项目提交页面上上传时,测试都会返回此代码设计的负面结果。这就像

static long partition(DataArray array, long l, long r, Record pivot)
        throws Exception {

    do { // Move bounds inward until they meet
        while (array.get(++l).compareTo(pivot) < 0)
            ;

这一行,我得到..三个错误...

错误 [Checkstyle]:-2 该语句只是一个“;”因此,什么也不做。您可能添加了“;”在不适当的位置(例如在 if 或 for 循环之后)。查看是否缺少代码或只是删除多余的“;”。

错误 [PMD]:-1(超出限制) 最好始终将 while 循环体中的代码用大括号括起来。它有助于减少出错的可能性。

错误 [PMD]:0(超出限制) 这个 while 循环体是空的。确保在 while 后面没有误加分号 (;)。如果您不需要在循环体中执行任何操作,则可以完全省略循环。

        while ((r != 0) && ((array.get(--r).compareTo(pivot) > 0)))
            ;

这里还有另外三个错误

错误 [Checkstyle]:-2 该语句只是一个“;”因此,什么也不做。您可能添加了“;”在不适当的位置(例如在 if 或 for 循环之后)。查看是否缺少代码或只是删除多余的“;”。

错误 [PMD]:0(超出限制) 最好始终将 while 循环体中的代码用大括号括起来。它有助于减少出错的可能性。

错误 [PMD]:0(超出限制) 这个 while 循环体是空的。确保在 while 后面没有误加分号 (;)。如果您不需要在循环体中执行任何操作,则可以完全省略循环。

        swap(array, l, r); // Swap out-of-place values
    }

    while (l < r); // Stop when they cross
    swap(array, l, r); // Reverse last, wasted swap
    return l; // Return first position in right partition
}

我知道这个测试服务器是有线的,所以我会因为这种原因而扣分。我如何重写这段代码来执行相同的操作?

最佳答案

那些 Checkstyle 和 PMD 消息并不完全是错误。它们显示了可能出现错误和不良编程风格的地方。

在您的案例中,他们在某种程度上是错误的:

while ((r != 0) && ((array.get(--r).compareTo(pivot) > 0))) ;

does it's job inside the condition,; 和省略 {} 是故意的,因为没有循环体。这些错误消息的主要原因是循环中有主体的情况。或者本来想拥有一个,但不小心添加了 ;,但现在却没有了。

然而,像这样的构造,即“滥用”计算表达式的部分来完成实际工作,会变得非常复杂,难以快速阅读。复杂不是好风格。

while (r > 0) {
    T element = array.get(--r);
    if (element.compareTo(pivot) <= 0) {
        break;
    }
}

虽然更加冗长,但应该与以前相同。 (r > 0 比 r != 0 更稳定,所以我改变了这一点。)我想这样它会通过样式检查。

您也可以尝试将 ; 替换为带有一些注释的 block (因为“空 block 应该被记录”应该是另一种风格的东西,至少在 Eclipse 中是这样。)那些工具认为什么是不好的风格。

while ((r != 0) && ((array.get(--r).compareTo(pivot) > 0))) { /* empty */ }

关于java - do while循环设计有设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26812784/

相关文章:

java - 为什么归并排序和快速排序操作的顺序会导致第二个操作运行得更快?

java - RESTful 1-N 可选关系

c# - 使用 webbrowser 从 C# 向套接字发送命令

java - 如何在 Windows/Linux 上查找进程是否正在运行

php - DIV 元素未被其中的内容向下推

c - 改进快速排序

java - 内部类问题的一般用法

c++ - 使用while循环确定数字的平方根c++

php - while 循环运行时的进度条

java - 中位数java实现的中位数