2013-03-15 89 views
0

要開始這是一個家庭作業,我有一些麻煩,並希望得到一些建議。到目前爲止,我已經創建了這個應用程序,以從用戶獲取10個輸入值並將它們存儲到一個數組中。我將數組傳遞給SmallAndLarge方法,在該方法中,它使用Sort()顯示了10個值中最小和最大的值,但現在我必須顯示用戶輸入的10個值中最小和最大的值,並且遇到了麻煩。任何幫助都會很棒!如何顯示陣列的最大值和最小值

另外還有一個問題,即注意到如果輸入數值1到10,則10將在數組排序和顯示之前在2之前。爲什麼是這樣?

namespace SmallAndLarge 
{ 
    class Program 
    { 
     static void Main() 
     { 
      int found = 0; 
      string[] numbers = new string[10]; 
      for (int i = 0; i < numbers.Length; i++) 
      { 
       Console.Write("Enter ten numbers --> "); 
       numbers[i] = Console.ReadLine(); 
      } 
      SmallestAndLargest(numbers); 



     } 
     public static int SmallestAndLargest(string[] numbers1) 
     { 

      int x; 
      Array.Sort(numbers1); 
      for (x = 0; x < numbers1.Length; ++x) 
       Console.Write("{0} ", numbers1[x]); 
      return x; 
     } 

    } 
} 
+6

你的許多問題,使用字符串數組,而不是一個整數數組來自你。在字符串排序中,10在2之前,因爲它基於第一個字符進行排序。 – 2013-03-15 21:05:51

回答

1

你有作爲字符串的數字。這解釋了爲什麼"10"出現在"2"之前,這與"am"出現在字母排序的"i"之前的原因相同。 "10"的第一個字符是'1',它在'2'之前。

因此,在對數組進行排序或搜索最大最小值之前,需要將字符串轉換爲某種數字類型。例如,它可以是int類型。您可以將它們保存在int[]類型的數組中,而不是string[]

從由Console.ReadLine給出的string轉換爲int,使用int.Parseint.TryParse方法的過載,例如。

如果應該允許用戶輸入非整數如3.14,則可以使用decimal而不是int

1

它看起來像你迭代數組。我將執行以下操作:

  1. 創建兩個int變量(小的和大,分別地)
  2. 設置他們兩個等於陣列
  3. 循環遍歷元件的第一元件;
  4. 對於每個元素[i],(使用int.Parse()或同等值將元素轉換爲int)。
    if element [i]> large,large = element [i];如果元素[i] < small,small = element [i]

如果您只需要min和max,就不需要排序。我將存儲int和int數組而不是字符串數組,在用戶輸入值時進行轉換。這樣,當輸入一個無效值時,你的程序就會失敗。

+1

你是對的,排序是n^2(更好的方法nlogn),如果他只是想要min和max,這很簡單n。 – sasjaq 2013-03-15 21:33:13

2

您可以使用Linq投並返回最大/最小using Min/Max

string[] numbers = new string[] {"1","2","3","15","30","7" }; 

var converted = numbers.Select(int.Parse); 
int largest = converted.Max(); 
int smallest = converted.Min(); 
+0

天啊,這個人幾乎不知道如何編碼,不要把Linq扔給他:P – theMayer 2013-03-15 21:25:41

+0

但是當然,我喜歡這種優雅:-) – theMayer 2013-03-15 21:28:55

+0

它可以在沒有2次選擇和2次解析的情況下完成;) – sasjaq 2013-03-15 21:31:21

0

這裏有一個非常簡單的,但很長的解釋。將值添加到列表並使用最小/最大返回值。您已經使用for循環遍歷列表,沒有理由執行兩次。

static void Main(string[] args) 
    { 
     string[] StringValues = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10","Not Number" }; 
     List<int> ConvertedStrings = new List<int>(); 

     foreach (string S in StringValues) 
     { 
      ConvertedStrings = ParseStringToInt(S, ConvertedStrings); 
     } 
     Console.WriteLine(); 
     Console.WriteLine("Max Value: " + ConvertedStrings.Max().ToString()); 
     Console.WriteLine("Min Value: " + ConvertedStrings.Min().ToString()); 
     Console.ReadLine(); 
    } 

    static private List<int> ParseStringToInt(string Input, List<int> ConvertedStrings) 
    { 
     int ConvertedValue = 0; 

     if (int.TryParse(Input, out ConvertedValue)) 
     { 
      Console.WriteLine(Input + " sucessfully parsed and added..."); 
      ConvertedStrings.Add(ConvertedValue); 
      return ConvertedStrings; 
     } 
     else 
     { 
     Console.WriteLine(Input + " failed to parse..."); 
     } 

     return ConvertedStrings; 
    } 

sa_ddam213已經拿到了殺手鐗,雖然答案:P

相關問題