【发布时间】:2019-06-16 21:29:21
【问题描述】:
使用方法制作一个允许您选择不同搜索/排序方法的程序。对于冒泡排序,当我尝试在代码底部输出数组时,它会打印“System.Int32[]”。此外,代码实际上永远不会结束,它只是打印出'System.Int32[]'和'End of pass _'。我如何阻止这种情况发生? 谢谢
我尝试将 {0} 换成实际的变量名,并在 for 循环中更改 'b
int pass_count = 0;
bool sorted = false;
int[] changing_array = new int[5];
int[] final_array = new int[5];
int[] starting_array = new int[5];
for (int a = 0; a < 5; a++)
{
Console.WriteLine("Input number {0}", (a + 1));
changing_array[a] = Convert.ToInt32(Console.ReadLine());
}
Array.Copy(changing_array, final_array, 5);
Array.Copy(changing_array, starting_array, 5);
Array.Sort(final_array);
while (sorted == false)
{
for (int b = 0; b < 4; b++)
{
int c = b++;
int temp;
if (changing_array[b] > changing_array[c])
{
temp = changing_array[b];
changing_array[b] = changing_array[c];
changing_array[c] = temp;
}
else
{
continue;
}
}
pass_count++;
if (changing_array == final_array)
{
Console.WriteLine("It took {0} passes to sort \n{1} \ninto \n{2} ",pass_count,starting_array,final_array);
sorted = true;
}
else
{
Console.WriteLine("End of pass {0}. \n{1} \nis now \n{2} ",pass_count,starting_array,changing_array);
}
}
假设最后的数字是“65,34,23,87,30”,我希望它打印“它需要 {0} 次通过排序 \n'65,34,23,87,30' \ ninto \n'23,30,34,65,87'",但它只打印 'System.Int32[]' 和 'End of pass _'。
【问题讨论】:
-
如果数组“相等”,则比较方式存在问题。数组是基于引用的,因此只有两个引用指针都指向同一个数组时它们才相等。查看stackoverflow.com/questions/3232744/… 以了解如何检查 2 个数组的值是否相同。所以简而言之,`if (changeing_array == final_array) 将始终评估为 false,因为它不检查值是否相同,但它会检查它们是否是同一个数组对象。因此 sorted 永远不会是真的并且循环是无限的
标签: c# arrays sorting bubble-sort