我正在尝试制作一个用于对随机数组进行排序的应用 我做了一些代码,我看不出有什么问题,它返回错误的值 注意:我正在努力学习编程。因此,不要提出解决问题的完全不同的方法。我只是想看看这段代码有什么问题,这样我才能变得更好。 RandomArrayCreator.create()返回的只是一个按随机顺序排列的数字数组。
public class ArraySorter
{
public static void main(String[] args)
{
int[] siyahi = RandomArrayCreator.create();
int[] siralanmish = new int[siyahi.length];
for (int i=0;i<siyahi.length;i++)
{
for (int j=0;j<siyahi.length;j++)
{
for (int k=j+1;k<siyahi.length;k++)
{
if (siyahi[k]<siyahi[j]) j=k;
}
siralanmish[i]=siyahi[j];
siyahi[j]=siyahi.length+1;
}
System.out.println(siralanmish[i]);
}
}
}
答案 0 :(得分:1)
我知道你不想要任何建议,但无论如何我都会提供建议。
希望这有助于指导您,但仍允许您提出自己的解决方案。
从最小到最大排序。
did I have swap an element?
while I swapped an element
assume I did not swap an element
for element i in the array
is i > i+1?
if yes
swap the elements
I did swap an element
else
do nothing
答案 1 :(得分:0)
鉴于您提到您想要学习如何改进当前程序,这里是极简主义的更改,您的代码将生成一个排序数组。
关于这些变化的几点说明:
1
if (siyahi[k]<siyahi[j]) j=k;
我假设这是为了尝试交换每个索引的值。相反,您将k的值赋给j,这将导致整个for循环出现问题。我将其替换为以下内容:
if (siyahi[k]<siyahi[j])
{
int temp = siyahi[j];
siyahi[j] = siyahi[k];
siyahi[k] = temp;
}
这会创建一个临时变量来存储其中一个值,以便您可以在每个索引处交换值而不会丢失其中一个值。
2
siralanmish[i]=siyahi[j];
这被替换为:
siralanmish[j]=siyahi[j];
这允许您直接将源数组中相同索引的值复制到目标数组。
3
siyahi[j]=siyahi.length+1;
此代码只会为您的数组填充原始数组的长度+ 1的值,否则您将丢失其他值。
包含修复程序的代码如下:
public class ArraySorter
{
public static void main(String[] args)
{
int[] siyahi = RandomArrayCreator.create();
int[] siralanmish = new int[siyahi.length];
for (int i=0;i<siyahi.length;i++)
{
for (int j=0;j<siyahi.length;j++)
{
for (int k=j+1;k<siyahi.length;k++)
{
if (siyahi[k]<siyahi[j])
{
int temp = siyahi[j];
siyahi[j] = siyahi[k];
siyahi[k] = temp;
}
}
siralanmish[j]=siyahi[j];
}
System.out.println(siralanmish[i]);
}
}