2011-12-30 6 views
9

Sono nuovo di zecca per la programmazione ed ero interessato a C#. Sto studiando gli array e devo confrontare la mia variabile (checkNum) con il mio array (myNums [10]). Ho letto post qui e molti altri siti e ho visto come confrontare ma rimanendo bloccato su come visualizzare correttamente il confronto come mostrato nel mio tentativo con la seguente istruzione if/else: (Continuerò a ricercare, ma apprezzerei e spintoni nel . giusta direzione Non necessariamente la risposta come sto voglia di imparare) :)Confronto di un valore int con un array, quindi visualizzare se il valore corrisponde o non corrisponde a

Ecco il mio codice:

int[] myNums = new int[10]; 
int checkNum; 
Console.WriteLine("Enter 10 numbers:"); 

for (int i = 0; i < 10; i++) 
{ 
    Console.Write("Number {0}: ", i + 1); 
    myNums[i] = int.Parse(Console.ReadLine()); 
} 
Console.WriteLine("You entered:"); 
foreach (int x in myNums) 
{ 
    Console.Write("{0} ", x); 
} 
Console.ReadLine(); 

Console.WriteLine("Enter another number:"); 
checkNum = int.Parse(Console.ReadLine()); 
bool exists = myNums.Contains(checkNum); 

if (checkNum == myNums[10]) 
{ 
    Console.WriteLine("Your number {0} is in the Array.", checkNum); 
} 
else 
{ 
    Console.WriteLine(
     "Your number {0} does not match any number in the Array.", 
     checkNum); 
} 
Console.ReadLine(); 
+1

In aggiunta a tutte le risposte relative ai limiti di array e che non utilizzano esiste var Vorrei aggiungere che di solito è una buona idea usare int.TryParse (string, out int) per evitare input errati. – Nickolodeon

+1

+1 per chiedere aiuto invece di chiedere la risposta –

risposta

0

è necessario scorrere la matrice, per vedere se il valore è in esso:

bool exists = false; 
for (int i=0; i<myNums.Length; i++) 
{ 
    if (checkNum == myNums[i]) 
    { 
     exists = true; 
     break; 
    } 
} 

if (exists) 
{ 
    Console.WriteLine("Your number {0} is in the Array.", checkNum); 
} 
else 
{ 
    Console.WriteLine(
     "Your number {0} does not match any number in the Array.", 
     checkNum); 
} 
+0

'Contains()' è molto più semplice da usare. –

+0

Contains è più semplice, ma puoi eseguire un iterazione dei risultati maggiore, in modo da poter vedere quale indice è uguale e quale no. –

+0

Bene, allora dovresti usare 'IndexOf' e controllare' -1', non c'è ancora bisogno di un ciclo nel tuo codice. L'OP non ha bisogno di conoscere l'indice comunque. –

6
bool exists = myNums.Contains(checkNum); 
if(checkNum == myNums[10]) 
{ 
    Console.WriteLine("Your number {0} is in the Array.", checkNum); 
} 
else 
{ 
    Console.WriteLine("Your number {0} does not match any number in the Array.", checkNum); 
} 

Dovrebbe essere

bool exists = myNums.Contains(checkNum); 
// or simply if(myNums.Contains(checkNum)) as you don't use the variable again 
if(exists) 
{ 
    Console.WriteLine("Your number {0} is in the Array.", checkNum); 
} 
else 
{ 
    Console.WriteLine("Your number {0} does not match any number in the Array.", checkNum); 
} 

Si esegue correttamente il controllo, ma non si utilizza il risultato (exists) e semplicemente (tentativo di) confrontare il nuovo numero per l'ultimo elemento della matrice. Naturalmente, a questo punto il tuo programma si blocca solo perché hai superato i limiti del tuo array.

Le matrici sono 0 indicizzate, ovvero nums[10] contiene indici 0-9.

+0

'Contains' renderebbe molto più semplice un mucchio del mio codice. :) ++ – John

+0

Grazie. Vedo dove ho fatto questo errore ora usando le altre variabili per l'istruzione "se", vice il bool "esiste" che sta eseguendo il confronto. Grazie. – Darwin

0

Perché si dispone dell'ultima istruzione if per: checkNum == myNums[10]? Dovrebbe usare la variabile exists.

Problemi correlati