2017-08-09 29 views
1

這是一個關於編譯器/語言如何處理這個問題的問題。 採取以下代碼:來自字符串數組的C#max()並不總是最大的數字

Console.WriteLine("Enter some numbers separated by ","); 
var numbers = Console.ReadLine(); 
var splitNumber = numbers.Split(','); 
var maxNumber = splitNumber.Max(); 
Console.WriteLine("highest is: " + maxNumber); 

輸入一個字符串,如「1,2,3,4,5」將輸出5作爲最大數量。 然而,使用「1,2,3,5,5,6」輸出6.而「33,1,4,1」給出了4.奇怪的是,「33,1,2,3」給出了33.

我知道有一個更好/更簡單/不同的使用循環的方式。我完全錯過了編譯器如何處理這些字符串以確定輸出。有人可以解釋嗎?或者提供一個參考來查看它?

+0

注意'splitNumber'是String' – CinCout

回答

8

「最大」字符串在字典順序最後一個字符串,即你會列出它們在字典中

您需要使用例如訂單int.Parse將字符串轉換爲數字類型,如果您想要數字最大值。

+0

的'陣列到目前爲止,這是解釋發生了什麼的唯一答案......以 –

+0

開頭的問題是啊!有道理!謝謝 –

7

在字符串比較,6> 55.而是執行此操作:

string x = "1,2,3,55,6"; 
var array = x.Split(','); 
Console.WriteLine("highest is: " + array.Max(c => int.Parse(c))); 

打印 「最高的是:55」

1

您需要的數量比較從列表或數組整數。

var <int> Numbers = new List<int>(); 
while(String had not ended) 
{ 
    var splitNumber = (int) numbers.Split(','); 
    Numbers.Add(splitNumner); 
}   
var maxNumber = Numbers.Max();   
Console.WriteLine("highest is: " + maxNumber); 
1

你可以做到這一點,字符串數組轉換爲數組INT使用ConvertAll然後找到最大

Console.WriteLine("Enter some numbers separated by "); 
    var numbers = Console.ReadLine(); 
    var splitNumber = numbers.Split(','); 
    int[] myInts = Array.ConvertAll(splitNumber, int.Parse); 
    var maxNumber = myInts.Max(); 
    Console.WriteLine("highest is: " + maxNumber); 
0

你也可以這樣做:

var splitNumber = numbers.Split(',').Select(c=>Convert.ToInt32(c)).Max(); 
Console.WriteLine("highest is: " + splitNumber); 
0

變化瓦爾到Int64

Int64 maxNumber = Int64.Parse(splitNumber.Max()); 
+0

瓦爾最多隻接受5位數字。 –

1

我試過編譯用相同的輸入代碼。我也得到了相同的輸出,但是當我嘗試對字符串數組執行.Max()操作時,它只會比較第二個數組中每個條目的第一個字符。

如果輸入1,2,3,55,6你會得到的輸出作爲,因爲當你比較所有的數字和有第一位是最大的。但是,如果您將輸入更改爲1,2,3,75,6,則您將獲得輸出爲,因爲是列表中所有數字中最大的第一位數字。

string str = "1,2,3,75,6"; 
var splitNumber = str.Split(','); 
var maxNumber = splitNumber.Max(); 

像所有其他答案你需要將字符串數組轉換爲整數數組,然後將其應用。

1

Ans for 編譯器如何處理這些字符串以確定輸出?

由於這些是字符串,因此會檢查字符串相等性。 編譯器獲取每個字符串值並將其與逐個字符進行比較。它推導平等於失配的第一次出現(例如,在55比6,5小於6,所以圖55是小於6)