使用If,Else if比较多个值

时间:2016-02-05 12:00:36

标签: c# if-statement

我对使用If有点困惑,否则,如果在我当前的项目中......我需要比较6个值,最小的值应该由消息框提示......这是我的代码

if ((sort1 > sort2) || (sort1 > sort3) || (sort1 > sort4) || (sort1 > sort5))
{
    MessageBox.Show("The Best Sorting Technique Algorithm is Insertion Sort with the time of " + elapsedMs1 + " ms");
}
else if ((sort2 > sort1) || (sort2 > sort3) || (sort2 > sort4) || (sort2 > sort5))
{
    MessageBox.Show("The Best Sorting Technique Algorithm is Selection Sort with the time of " + elapsedMs2 + " ms");
}
else if ((sort3 > sort1) || (sort3 > sort2) || (sort3 > sort4) || (sort3 > sort5))
{
    MessageBox.Show("The Best Sorting Technique Algorithm is Bubble Sort with the time of " + elapsedMs3 + " ms");
}
else if ((sort4 > sort1) || (sort4 > sort2) || (sort4 > sort3) || (sort4 > sort5))
{
    MessageBox.Show("The Best Sorting Technique Algorithm is Merge Sort with the time of " + elapsedMs4 + " ms");
}
else if ((sort5 > sort1) || (sort5 > sort2) || (sort5 > sort3) || (sort5 > sort1))
{
    MessageBox.Show("The Best Sorting Technique Algorithm is Quick Sort with the time of " + elapsedMs5 + " ms");
}

但它不会提示消息框上的最小数字。这有没有正确的编码,而不是使用if,否则如果? 我也尝试使用AND但它也不起作用..

6 个答案:

答案 0 :(得分:1)

丢弃此代码并改为使用循环。

  • 将结果放入数组中。
  • 使用变量int largest_value = 0
  • 使用变量int largest_index = -1
  • 遍历数组并为每个结果检查它是否大于" largest_value"。
  • 如果值较大,请设置largest_value =值,并设置largest_index = i;,其中i是循环迭代器。

循环结束后,largest_value将包含最大值,largest_index将指出数组中此值的位置。

答案 1 :(得分:1)

我建议使用 Dictionary Linq

var algorithms = new Dictionary<String, Double>() { // or Dictionary<String, int>
  {"Insertion Sort", sort1},
  {"Selection Sort", sort2},
  ...
};

var best = algorithms
  .OrderBy(pair => pair.Value)
  .First();

MessageBox.Show(String.Format("The Best Sorting Technique Algorithm is {0} with the time of {1} ms", best.Key, best.Value));

使用 Linq 的优点是您可以轻松创建自己喜欢的报告,例如让我们打印出从最快到最慢的算法:

var data = algorithms
  .OrderBy(pair => pair.Value)
  .Select(pair => String.Format("{0} took {1} ms", pair.Key, pair.Value));

MessageBox.Show(String.Join(Environment.NewLine, data));

答案 2 :(得分:1)

我会将所有结果存储在一个字典中(数字组成):

Dictionary<string, int>  myDictionary = new Dictionary<string, int>()
{
    {"Insertion Sort", 12},
    {"Selection Sort ", 35},
    {"Bubble Sort", 42},
    {"Merge Sort", 52},
    {"Quick Sort ", 32}
};

var min = myDictionary.First(kv => kv.Value == myDictionary.Values.Min());
Console.Out.WriteLine("The fastest is " + min.Key + " with a time of " + min.Value + "ms");

这将允许您在不更改if / else结构的情况下测试尽可能多的算法(因为您不会使用它)。

输出结果为:

  

最快的是插入排序,时间为12毫秒

答案 3 :(得分:0)

这不是else if的问题,而是你使用的运算符更多 - 如果排序算法比其他所有运算符更快,而不仅仅是一个,那么排序算法最快。

因此,请更改条件以使用&&运算符而不是||

请注意,这不是最好的解决方案(请参阅其他人对此的评论),它只是您代码的狐狸。

答案 4 :(得分:0)

更改每个||和&amp;&amp;你希望他们都是真的。

更改每个&gt;到&lt ;,因为你想要最小的,而不是最大的。

如果出现以下情况,您的姓氏也会输入错误:您有sort5&gt; sort1两次,你没有sort5&gt; sort4

答案 5 :(得分:0)

我认为你的意思如下:)

if ( !( sort1 < sort2 ) && !( sort1 < sort3 ) && !( sort1 < sort4 ) && !( sort1 < sort5 ) )
{
    MessageBox.Show("The Best Sorting Technique Algorithm is Insertion Sort with the time of " + elapsedMs1 + " ms");
}
else if ( !( sort2 < sort3 ) && !( sort2 < sort4 ) && !( sort2 < sort5 ) )
{
    MessageBox.Show("The Best Sorting Technique Algorithm is Selection Sort with the time of " + elapsedMs2 + " ms");
}
else if ( !( sort3 < sort4 ) && !( sort3 < sort5 ) )
{
    MessageBox.Show("The Best Sorting Technique Algorithm is Bubble Sort with the time of " + elapsedMs3 + " ms");
}
else if ( !( sort4 < sort5 ) )
{
    MessageBox.Show("The Best Sorting Technique Algorithm is Merge Sort with the time of " + elapsedMs4 + " ms");
}
else 
{
    MessageBox.Show("The Best Sorting Technique Algorithm is Quick Sort with the time of " + elapsedMs5 + " ms");
}

我认为sort1,sort2等的值可以相互相等。在这种情况下,选择具有最低变量名称的值。:)