gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:00:25 25 4
gpt4 key购买 nike

我的方法partition,对于我的quick sort,我运行的时候还可以。但是,每当我在项目提交页面上上传时,测试都会对该代码的设计返回否定结果。这就像

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))) ;

它是否在条件内起作用,; 和省略 {} 是有意为之的,因为循环没有主体。这些错误消息的主要原因是您的循环有主体的情况。或者打算拥有一个但不小心添加了一个 ; 而现在你没有。

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

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 - 做while循环设计有设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26812784/

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