gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 10:05:50 25 4
gpt4 key购买 nike

我的方法应该返回数组未排序部分中最大元素的位置,该方法的第二个参数指定数组未排序部分结束的最大索引。我的 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/

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