我有一些问题。我需要找到最小值和最大值并交换它们。这是我的代码,请帮助我,如果可以的话。感谢。
Queue myQueue = new Queue();
Random rnd = new Random();
for (var k = 0; k <= 5; k++) myQueue.Enqueue(rnd.Next(0, 10));
foreach (var d in myQueue) Console.Write("{0} ", d);
var min = (int)myQueue.Peek(); var max = 0;
var minInd = 0; var maxInd = 0;
for (var c = 0; c < myQueue.Count; c++)
{
if ((int)myQueue.Peek() < min)
{
min = (int)myQueue.Peek();
minInd = c;
}
if ((int)myQueue.Peek() > max)
{
max = (int)myQueue.Peek();
maxInd = c;
}
foreach (var f in myQueue) Console.Write(" {0}", f);
}
答案 0 :(得分:0)
首先,您使用的是错误的类。 Queue
用于列出需要按顺序处理的内容,而不是处理数据集。我编辑了你的代码以使用List<>
,进行了一些常规清理,并添加了交换代码:
List<int> list = new List<int>();
Random rnd = new Random();
for (var k = 0; k <= 5; k++)
list.Add(rnd.Next(0, 10));
int min = 0;
int max = 0;
for (var i = 0; i < list.Count; i++)
{
if (list[i] < min)
min = i;
if (list[i] > max)
max = i;
}
Console.Write("Before: ");
foreach (var item in list)
Console.Write("{0}", item);
var tmp = list[min];
list[min] = list[max];
list[max] = tmp;
Console.Write("\nAfter: ");
var queue = new Queue(list);
foreach (var item in queue)
Console.Write("{0}", item);
Console.ReadLine();
答案 1 :(得分:0)
正如另一个答案中所提到的,没有理由在这里使用队列,也可以使一切变得更容易。
var randomList = Enumerable.Range(0,5).ToList();
var min = randomList.Min();
var max = randomList.Max();
var minIndex = randomList.IndexOf(min);
var maxIndex = randomList.IndexOf(max);
randomList[minIndex] = max;
randomList[maxIndex] = min;
正如你所看到的,事情不一定很难:)