2011-12-30 10 views
9

Jestem nowy w programowaniu i był zainteresowany C#. Studiuję tablice i muszę porównać moją zmienną (checkNum) z moją tablicą (myNums [10]). Czytałem posty tutaj i kilka innych stron i widziałem, jak porównywać, ale utknąłem na tym, jak poprawnie wyświetlić porównanie, jak pokazano w mojej próbie z poniższym stwierdzeniem if/else: (Będę kontynuować badania, ale doceniam i trąca w . prawy kierunek niekoniecznie odpowiedź jak ja, którzy chcą uczyć się) :)Porównywanie wartości int z tablicą, a następnie wyświetlanie, jeśli wartość pasuje lub nie pasuje

Oto mój kod:

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

Oprócz wszystkich odpowiedzi dotyczących granic tablic i nie używania istnieje var Chciałbym dodać, że zazwyczaj dobrym pomysłem jest użycie int.TryParse (string, out int), aby uniknąć złych danych wejściowych. – Nickolodeon

+1

+1 za prośbę o pomoc, zamiast pytać o odpowiedź –

Odpowiedz

0

trzeba iterację tablicy, aby sprawdzić, czy wartość jest w nim:

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()' jest o wiele łatwiejszy w użyciu. –

+0

Zawartość jest prostsza, ale można wykonać iterację o większym wyniku, aby można było sprawdzić, który indeks jest równy, a który nie. –

+0

Cóż, możesz użyć 'IndexOf' i sprawdzić' -1', nadal nie potrzebujesz pętli w kodzie. OP i tak nie potrzebuje znać indeksu. –

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

Powinny być

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

można prawidłowo przeprowadzić kontrolę, ale nie korzystają z wyniku (exists) i po prostu (próbę) porównać nowy numer do ostatniego elementu w tablicy. Oczywiście w tym momencie twój program właśnie się zawiesza, ponieważ przekroczyłeś granice swojej tablicy.

Tablice mają indeks 0, tzn. nums[10] zawierają indeksy 0-9.

+0

'Contains' znacznie uprości wiązkę mojego kodu. :) ++ – John

+0

Dziękuję. Widzę, gdzie popełniłem tę pomyłkę teraz, używając innych zmiennych dla wyrażenia "if" vice bool "exist", który wykonuje porównanie. Dziękuję Ci. – Darwin

0

Dlaczego masz ostatnie stwierdzenie, sprawdzające pod kątem: checkNum == myNums[10]? Powinien używać zmiennej exists.

Powiązane problemy