java - 需要帮助修复我的选择排序

标签 java

我的方法应该返回数组未排序部分中最大元素的位置,该方法的第二个参数指定数组未排序部分结束的最大索引。我的 testMaxPositionMiddle 通过了,但我的 testMaxPositionFirst 失败了,我不明白为什么。

public Object maxPosition(int[] array, int x)
{

for( int i = 0; i < array.length - 1; i++)
{
    int maxPosition = i;
    for( int j = 0; j < array.length; j++)
    {
        if(array[j] > array[maxPosition])
        {
            maxPosition = j;
            return maxPosition;
        }
    }
}
return null;
}
<小时/>
@Test
public void testMaxPositionMiddle()
{
int[] x = { 1, 5, 3, 7, 8, 9};
MySorter s = new MySorter();
assertEquals(1, s.maxPosition(x,2));

}

@Test
public void testMaxPositionFirst()
{
int[] x = {5, 1, 3, 2, 8, 9};
MySorter s = new MySorter();
assertEquals(0, s.maxPosition(x, 3));

}

最佳答案

您的代码中有三个个错误。

第一个是您实际上是在检查整个数组中的 maxvalue,而不是检查 0.....x 之间的值。因此,您应该将循环更改为循环整个数组,而仅循环开头:

for(int i = 0; i <= x; i++){

}

你的第二个问题是,当你只需要一个循环时,你正在运行两个循环:检查最大值的循环。首先假设最大值是第一个 (0) 位置的值,然后每次找到更大的值时更新 maxvalue。首先将 maxPosition 的值设置为 0,作为循环之前的起始值。

int maxPosition = 0;

你的第三个问题是,如果第一个位置 (0) 实际上包含正确的值,那么 maxPosition 应该为 0。

if(array[j] > array[maxPosition]){
    maxPosition = j;
    return maxPosition;
}

在这些行中,您将返回正确的 maxPosition 如果它已更新。如果 maxPosition 为 0,则永远不会更新,那么你将永远不会到达这一行:

return maxPosition;

相反,您将在函数末尾找到 return 语句,并返回 null,如下行所示:

return null;
<小时/>

实际上您的代码甚至有第四个错误。在这种状态下,您将在开始时返回大于 maxPosition 的任何值。

例如,如果您有一个列表 (2,4,6),则 maxPosition 一开始将为 0。 maxValue 将为 2,但这些代码行:

if(array[j] > array[maxPosition]){
    maxPosition = j;
    return maxPosition;
}

实际上会让您跳转到 if 语句内,即使在第二种情况下,即自 4>2 以来,值 array[1] > array[maxPosition] 也是如此。因此,您的代码将返回 maxPosition 1

您想要做的是从 if 语句中删除 return 语句,并且您的函数只有一个 return 语句。这应该在你的总函数的末尾,在 for 循环之后

关于java - 需要帮助修复我的选择排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36489233/

相关文章:

java - 如何使一个复杂的对象成为 Observable

java - 我可以在 ArrayList (java) 中创建一个 ArrayList 吗?

java - apache wicket 中 SignInPage 的本地化

java - 让操作系统删除文件

Java 二十一点投注和发牌并没有按照我的预期进行

java - Red5 无法开始分发

java - 使用Eclipse IDE可以完美编译并运行Java程序,但是当我使用 'javac'时,会出现错误

java - "Mobile agent"或 "Thread migration"中哪一个在集群环境中性能效率更高?

java - 调用合并排序方法时出现堆栈溢出错误

java - 如何从对 URL 的 RestTemplate 调用中提取 HTTP 状态代码?