2013-05-09 12 views
5

Ich habe ein Array, sagenWie überprüft man, ob alle Elemente in einem Array positive ganze Zahlen sind?

int[] array = new int[] { 1, 5, 11, 5 }; 

Wie kann ich (in den meisten einfach und effizient) prüfen, ob alle Elemente positiv sind? Wenn mindestens eine Zahl keine positive ganze Zahl ist, reagiert das System negativ.

gewünschte Ausgabe:

, wenn alle Zahlen positiv sind, dann wird es "Alles Positive" else "Wrong"

Mein

int[] array = new int[] { 1, 5, 11, 5 }; 
var x = array.All(c => c >= '0' && c <= '9'); 
if (x == true) "Positive" else "Wrong"; 
+2

'array.Alle (x => x> -1)'? – Patashu

+0

Nun sollten Sie überprüfen mit '.Any' von ihnen ist weniger als Null – V4Vendetta

Antwort

12

Sie waren schon fast da - aber Sie verglichen mit Zeichen statt Ganzzahlen.

Wenn Sie überprüfen wollen, ob alles streng positiv ist, zu verwenden:

bool allPositive = array.All(x => x > 0); 

Wenn Sie tatsächlich überprüfen wollen, sie sind alle nicht-negativ (dh 0 ist zulässig) verwenden:

bool allNonNegative = array.All(x => x >= 0); 

Sie sollten sich unbedingt überlegen, was Sie mit 0 machen wollen, da Ihre Problemstellung eigentlich widersprüchlich ist. ("Alle positiv" und "nein negativ" sind nicht das Gleiche.)

Beachten Sie, dass genau wie Any, All wird beendet, sobald es das Ergebnis kennt - also wenn der erste Wert negativ ist, hat es gewonnen ' Ich muss den Rest durchsehen.

+0

Verdammt! Meine Lösung war schneller ': D' –

5

Verwenden Schuss anzuzeigen Enumerable.Any wie :

if(array.Any(r => r < 0)) 
{ 
    //Negative number found 
} 
else 
{ 
    //All numbers are positive 
} 

Oder können Sie Enumerable.All Wie verwenden:

if(array.All(r => r > 0)) 
{ 
    //All numbers are positive 
} 
else 
{ 
    //Negative number found 
} 
+1

Angesichts der OP ausgedrückt dies als "alle Werte sind positiv" Ich denke, es ist klarer, 'All' zu verwenden und einen positiven Test als' Any' mit einem negativen Test und die Ergebnisse umgekehrt. –

+0

@JonSkeet, danke, habe meine Antwort geändert – Habib

+0

OP erwähnt 'mindestens eine negative Zahl', also wäre' Any' noch gültig. –

3

Sie es fast geschafft. Aber in Ihrem Zustand vergleichen Sie Zeichen statt Ganzzahlen, was in Ihrer Situation falsch ist.

Verwenden Sie Enumerable.All like;

Bestimmt, ob alle Elemente einer Sequenz eine Bedingung erfüllen.

int[] array = new int[] { 1, 5, 11, 5 }; 
bool allPositive = array.All(x => x > 0); 
Console.WriteLine(allPositive); 

Hier ist ein DEMO.

Denken Sie daran, 0 ist nicht positiv.

1

Unten finden Sie eine C# Lösung für Ihr Problem ist (es sollte vielmehr eine effiziente Performance-weise sein):

int[] array = new int[] { 1, 5, 11,5 }; 

bool _allPositive=true; 

for (int i=0;i<array.length;i++){ 
if(array[i]<0 {_allPositive=false; break;} 
} 

bool _allPositive zeigt das Ergebnis (Sie String var verwenden können, wenn Sie bevorzugen). Im Wesentlichen kann die gleiche Syntax für Java-ähnliche Sprachen gelten, einschließlich Scripting.

1
string result = array.Any(x => x < 0)?"Wrong":"Positive"; 
Verwandte Themen