2013-10-12 43 views
1

如何編寫在列表中查找最大和最小分數的程序?如何編寫一個發現最大和最小分數的程序?

Console.WriteLine("How many fractions to comapre?"); 
     string nic = Console.ReadLine(); 
     int amount = int.Parse(nic); 
     double min = 0; double max = 0; 
     for (int i = 0; i < amount; i++) 
     { 
      Console.WriteLine("Enter fraction to compare. WRITE AS IMPROPER FRCATION"); 
      string str = Console.ReadLine(); 
      string[] each = str.Split('/'); 
      List<double> eachDoub = new List<double> { }; 
      foreach (string hit in each) 
      { 
       eachDoub.Add(double.Parse(hit)); 
      } 
      List<double> finals = new List<double> { }; 
      foreach (double hit in eachDoub) 
      { 
       finals.Add(eachDoub[0]/eachDoub[1]); 
      } 
      max = finals.Max(); 
      min = finals.Min(); 
     } 
     Console.WriteLine("The maximum is {0} and the minimum is {1}.", max, min); 
     Console.ReadLine(); 

輸入: 多少分數來comapre? 3
輸入分數
4/1 輸入分數
3/1

當我運行這個程序,它不能正常工作,這將只打印了分鐘,雙方最後的輸入值最大。我怎樣才能解決這個問題?

+0

你期待輸出是什麼,輸出是什麼? 「它不工作」不是很具描述性。 – Cyral

+1

@EdwardKarak - 我編輯了這個問題,向你展示我的意思是不是一個問題。現在有了。 – Hogan

回答

4

只需推動該行

List<double> finals = new List<double> { }; 

圈外。

爲什麼?因爲當它在循環中沒有記錄所有的值時,它會在每個相互關係上「重置」

2

您只需要在for之外聲明總決賽列表,並且也可以在外部進行計算,只需要一次就調用Max()Min()方法三次。在這種情況下,只有3次迭代,差異不會有意義,但作爲一種良好的編碼習慣,您應該在循環之外計算這些值。

Console.WriteLine("How many fractions to comapre?"); 
    string nic = Console.ReadLine(); 
    int amount = int.Parse(nic); 
    double min = 0; double max = 0; 
    List<double> finals = new List<double> { }; 

    for (int i = 0; i < amount; i++) 
    { 
     Console.WriteLine("Enter fraction to compare. WRITE AS IMPROPER FRCATION"); 
     string str = Console.ReadLine(); 
     string[] each = str.Split('/'); 
     List<double> eachDoub = new List<double> { }; 
     foreach (string hit in each) 
     { 
      eachDoub.Add(double.Parse(hit)); 
     } 

     foreach (double hit in eachDoub) 
     { 
      finals.Add(eachDoub[0]/eachDoub[1]); 
     } 
    } 
    max = finals.Max(); 
    min = finals.Min(); 

    Console.WriteLine("The maximum is {0} and the minimum is {1}.", max, min); 
    Console.ReadLine(); 
+0

擊敗你20秒:)另外,將最小值和最大值放在循環外部是有意義的,但這不是必需的。 – Hogan

+0

我想你會把它放在你自己的代碼中的循環之外,而不是在循環內部,對吧? :) –

+0

當然不是,這是浪費寶貴的週期! – Hogan

1

該循環看起來不正確 - 迭代變量從不使用。

foreach (double hit in eachDoub) 
    { 
     finals.Add(eachDoub[0]/eachDoub[1]); 
    }