2011-12-30 16 views
9

Soy nuevo en la programación y estaba interesado en C#. Estoy estudiando arreglos y tengo que comparar mi variable (checkNum) con mi matriz (myNums [10]). He leído publicaciones aquí y en varios otros sitios y he visto cómo comparar pero me he quedado atrapado en cómo mostrar correctamente la comparación como se muestra en mi intento con la siguiente instrucción if/else: (Continuaré investigando, pero apreciaría y empujaría en el . dirección correcta No necesariamente la respuesta que estoy queriendo aprender) :)Comparando un valor int con una matriz, luego muestra si el valor coincide o no coincide

Aquí está mi código:

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

Además de todas las respuestas relacionadas con los límites de la matriz y no utilizar var existe, agregaría que generalmente es una buena idea usar int.TryParse (cadena, out int) para evitar la entrada incorrecta. – Nickolodeon

+1

+1 para pedir ayuda en lugar de pedir la respuesta –

Respuesta

0

es necesario para recorrer la matriz para ver si el valor está en que:

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

'Contiene()' es mucho más fácil de usar. –

+0

Contiene es más simple, pero puede hacer un mayor iteración de resultados, para que pueda ver qué índice es igual y cuál no. –

+0

Bueno, entonces usaría 'IndexOf' y comprobaría' -1', todavía no es necesario un bucle en su código. El OP no necesita saber el índice de todos modos. –

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); 
} 

Debe ser

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); 
} 

Se realiza la comprobación de manera correcta, pero no utilizar el resultado (exists) y simplemente (intento de) comparar el nuevo número para el último elemento de la matriz. Por supuesto, en este momento su programa simplemente falla porque ha sobrepasado los límites de su matriz.

Las matrices están indexadas 0, es decir, nums[10] contienen índices 0-9.

+0

'Contains' haría mucho más sencillo mi código. :) ++ – John

+0

Gracias. Veo dónde cometí ese error ahora usando las otras variables para la declaración "si" vice el bool "existe" que está realizando la comparación. Gracias. – Darwin

0

¿Por qué tiene la última instrucción if que comprueba: checkNum == myNums[10]? Debe usar la variable exists.

Cuestiones relacionadas