gpt4 book ai didi

Java-对 int 数组进行排序

转载 作者:行者123 更新时间:2023-12-01 07:49:48 25 4
gpt4 key购买 nike

我正在尝试使用此方法按升序对整数数组进行排序。但我的 for 循环只运行一次。

public void sortArray()
{
boolean sorted = false;

while(sorted == false)
{
int temp;
for(int i = 0; i < inArray.length - 1; i++)
{
if(inArray[i] > inArray[i + 1])
{
temp = inArray[i];
inArray[i] = inArray[i + 1];
anArray[i + 1] = temp;
}
}
sorted = true;
}
}

我知道这与我处理 boolean 标志的方式有关,但我不确定如何修复它。任何建议,将不胜感激。提前致谢。

最佳答案

这里有多个问题:

  1. while (sorted = false)sorted 设置为 false,然后测试结果值 false,这意味着您根本不会进入循环体(根据您的问题一次也没有进入过)。

  2. 如果您解决了这个问题,您的代码将仅运行 一次 while 循环体(从而使数组尚未排序),因为您有 sorted = true 作为循环体末尾的无条件语句。

您需要有一个标志,假设数组已排序,然后如果您发现证据没有排序,则清除该标志,例如:

public void sortArray()
{
boolean sorted;

do
{
sorted = true; // Assume it's sorted
int temp;
for(int i = 0; i < inArray.length - 1; i++)
{
if(inArray[i] > inArray[i + 1])
{
temp = inArray[i];
inArray[i] = inArray[i + 1];
anArray[i + 1] = temp;
sorted = false; // We changed something, so assume we need to do another pass
}
}
}
while (!sorted);
}
<小时/>

旁注:这只是一种风格问题,但通常最好尽可能缩小变量的范围。 temp 不需要位于 for 循环之外,甚至不需要位于 if block 之外,只需将其移动到 for 循环内部即可。 if block

public void sortArray()
{
boolean sorted;

do
{
sorted = true; // Assume it's sorted
for(int i = 0; i < inArray.length - 1; i++)
{
if(inArray[i] > inArray[i + 1])
{
int temp = inArray[i];
inArray[i] = inArray[i + 1];
anArray[i + 1] = temp;
sorted = false; // We changed something, so assume we need to do another pass
}
}
}
while (!sorted);
}

关于Java-对 int 数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40369529/

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