2016-06-19 7 views
-1

ich in einem Interview vor kurzem gefragt wurde ein Verfahren zu schaffen, in denen die folgenden Prüfungen durchgeführt werden sollen:Zurück die kleinste ganze Zahl in einem Arraylist in C#

  1. -Code zu überprüfen, ob Arraylist null ist
  2. Code Schleife durch Arraylist-Objekte
  3. -Code sicher Objekt zu machen, ist eine ganze Zahl
  4. -Code zu überprüfen, ob es null ist, und wenn nicht, dann es gegen eine Variable vergleichen die kleinste ganze Zahl aus der Liste enthält, und wenn kleiner dann überschreibt .
  5. Geben Sie die kleinste Ganzzahl in der Liste zurück.

Also habe ich die folgende Methode

static void Main(string[] args) 
{ 
    ArrayList list = new ArrayList(); 
    list.Add(1); 
    list.Add(2); 
    list.Add(3); 
    list.Add(4); 
    list.Add(5); 

    Program p = new Program(); 
    p.Min(list);    
} 

private int? Min(ArrayList list) 
{ 
    int value;           
    //Code to check if ArrayList is null 
    if (list.Count > 0) 
    { 
     string minValue = GetMinValue(list).ToString(); 

     //Code to loop through ArrayList objects 
     for(int i = 0; i < list.Count; i++) 
     {      
      //Code to make sure object is an integer 
      //Code to check if it is null, and if not to compare it against a variable containing the 
      //smallest integer from the list and if smaller overwrite it. 
      if (Int32.TryParse(i.ToString(), out value) || i.ToString() != string.Empty) 
      { 
       if (Convert.ToInt32(list[i]) < Convert.ToInt32(minValue)) 
       { 
        minValue = list[i]; 
       } 
      } 
     } 
     }    
     return Convert.ToInt32(GetMinValue(list)); 
} 

public static object GetMinValue(ArrayList arrList) 
{ 
     ArrayList sortArrayList = arrList; 
     sortArrayList.Sort(); 
     return sortArrayList[0]; 
} 

ich denke, die oben etwas richtig ist, aber bin mir nicht ganz sicher 4?

+0

Sollte es nicht sein: minValue = list [i]; – jdweng

+0

Hoppla korrigiert, dass @jdweng danke – Kevin

+0

Habe ich dein Problem gelöst? – jdweng

Antwort

0

Ich denke, die folgende Logik kann Ihnen helfen. Es ist einfacher als die aktuelle und verwenden int.TryParse() für die Analyse, die besser ist als Convert.To..() und int.Parse() Da es einige interne Fehlerbehandlung hat und daher wird es keine Ausnahme für ungültige Eingabe auslösen. Wenn die Eingabe ungültig ist, gibt sie 0 an die Variable out aus und gibt false zurück. Daraus kann man annehmen, dass die Konvertierung fehlgeschlagen ist. Sehen Sie den Code für diese:

var arrayMin = listOfInt; 
int currentNum = 0; 
int yourNum = int.MaxValue; 
bool isSuccess = true; 
foreach (var item in listOfInt) 
{ 
    if (int.TryParse(item.ToString(), out currentNum) && currentNum <= yourNum) 
    { 
     yourNum = currentNum; 
    } 
    else 
    { 
     isSuccess = false; 
     break; 
    }    
} 
if(isSuccess) 
    Console.WriteLine("Minimum Number in the array is {0}",yourNum); 
else 
    Console.WriteLine("Invalid input element found"); 
+0

Sollte nicht int 'minNum = int.MaxValue; 'be' int minNum = int.MinValue; '? – Kevin

+1

@Kevin: Gutes Denken, aber wird nicht die erwartete Ausgabe geben –

+0

Es gibt ein Problem mit der Lösung, wenn die Array-Liste ein String-Element "0" enthält, dann wird ein ungültiges Eingabeelement gefunden. Aber die Funktion 'int.TryParse' sollte es analysieren? Irgendwelche Vorschläge – Kevin

0

Simplistic Version:

private int? Min(ArrayList list) 
{ 
    if (list == null || list.Count == 0) return null; 
    return list.Cast<int>().Min(); 
} 
+0

Danke für die Lösung, aber es gibt ein Problem, wenn die Liste einen String int-Wert wie "0" enthält. Ich erhalte die Ausnahme "Cast ist ungültig". – Kevin

Verwandte Themen