Próbuję sprawdzić, czy wartość NSInteger jest nieparzysta czy parzysta. Znalazłem sposób, aby to zrobić za pomocą C, ale nie działa z Objective-C. Jak to zrobić?Sprawdzanie, czy wartość NSInteger jest nieparzysta, czy nawet
Odpowiedz
NSInteger
jest zdefiniowana jako int
(lub long
w niektórych środowiskach). Sprawdzanie osobliwości jest jak w przypadku int:
NSInteger num;
if (num % 2)
// odd
else
// even
NSInteger n = 5;
NSLog(@"%s", n & 1 ? "odd" : "even");
lub za pomocą jeśli
if (n & 1) {
; // odd
} else {
; // even
}
niektóre wyjściowej:
if (n & 1) {
NSLog(@"odd");
} else {
NSLog(@"even");
}
przykład wskaźnik:
NSInteger x = 7;
NSInteger *y = &x;
if (*y & 1) {
NSLog(@"odd");
} else {
NSLog(@"even");
}
O ile mi wiadomo. NSInteger
, w przeciwieństwie NSNumber
, to tylko typeder do rzeczywistego typu całkowitego wzdłuż linii:
typedef long NSInteger;
więc powinieneś być w stanie to zrobić:
NSInteger nsintvar = 77;
if ((nsintvar % 2) == 0) {
// number is even
} else {
// number is odd
}
Oto kompletny program, opracowywane pod Cygwin z GNUstep, który to ilustruje:
#import <stdio.h>
#import <Foundation/NSObject.h>
int main(int argc, const char *argv[]) {
NSInteger num;
for (num = 0; num < 20; num++) {
if ((num % 2) == 0) {
printf ("%d is even\n", num);
} else {
printf ("%d is odd\n", num);
}
}
return 0;
}
Otrzymuje:
0 is even
1 is odd
2 is even
3 is odd
4 is even
5 is odd
6 is even
7 is odd
8 is even
9 is odd
10 is even
11 is odd
12 is even
13 is odd
14 is even
15 is odd
16 is even
17 is odd
18 is even
19 is odd
Nie wydaje się działać. http://cl.ly/Zdg – Joshua
Czy na pewno deklarujesz zmienną jako NSInteger? Widziałem tylko ten problem ("Nieprawidłowe operandy dla binarnego X", gdzie X jest prawidłowym operatorem C), kiedy deklarujesz zmienną jako NSInteger * (wskaźnik zamiast rzeczywistej liczby całkowitej). Wypróbuj pełny program w mojej edycji. – paxdiablo
Myślę, że ta odpowiedź jest najlepsza. '((nsintvar% 2) == 0)' jest bardziej zwięzły; nie miesza typów bool i integer. – capikaw
Te inne odpowiedzi powinny działać. Może to problem z plikiem Makefile lub czymś podobnym. Pomyśl o tym kawałku kodu.
Jeśli wszystko inne zawiedzie, po prostu zadeklaruj liczbę całkowitą jako int. Nie musisz deklarować go jako NSInteger.
Użyj operatora "%". Zasadniczo działa ona na pozostałą część, gdy dzielisz liczbę. Więc:
liczba% 2
Byłoby = 0 jeśli liczba była parzysta, jako parzysta liczba dzieli się przez 2 ma żadnych pozostałości. Jeśli nie = 0, musi być nieparzyste.
NSArray *arrayTotal = [NSArray arrayWithObjects:@"A", nil];
// NSArray *arrayTotal = [NSArray arrayWithObjects:@"A", @"B", nil];
// NSArray *arrayTotal = [NSArray arrayWithObjects:@"A", @"B", @"C", nil];
// NSArray *arrayTotal = [NSArray arrayWithObjects:@"A", @"B", @"C", @"D", nil];
// NSArray *arrayTotal = [NSArray arrayWithObjects:@"A", @"B", @"C", @"D", @"E", nil];
NSArray *arrLeft;
NSArray *arrRight;
NSRange range;
range.location = 0;
range.length = ([arrayTotal count] % 2) ? ([arrayTotal count]/2) + 1 : ([arrayTotal count]/2);
arrLeft = [arrayTotal subarrayWithRange:range];
range.location = range.length;
range.length = [arrayTotal count] - range.length;
arrRight = [arrayTotal subarrayWithRange:range];
NSLog(@"Objects: %lu", (unsigned long)[arrLeft count]);
NSLog(@"%@", [arrLeft description]);
NSLog(@"Objects: %lu", (unsigned long)[arrRight count]);
NSLog(@"%@", [arrRight description]);
Mam nadzieję, że pomoże!
- 1. Sprawdzanie czy wartość float jest NaN
- 2. Sprawdzanie czy wartość BigDecimal jest zero w wyrażeniu JSP EL
- 3. Sprawdzanie, czy podwójna wartość jest liczbą całkowitą - Swift
- 4. sprawdzanie, czy wartość pola tekstowego jest liczbą całkowitą w javascript
- 5. Sprawdzanie, czy zmienna DateTime ma przypisaną wartość
- 6. Czy można rzucić NSInteger do NSNumber?
- 7. PHP - Sprawdzanie, czy indeks tablicy istnieje, czy jest pusty
- 8. AS3: Sprawdzanie czy zmienna jest typu Object
- 9. Sprawdzanie, czy plik jest całkowicie zapisany.
- 10. Testowanie, czy wartość jest funkcją
- 11. sprawdzając, czy wartość kolumna jest aktualizowana
- 12. mvc 4 IEnumerable sprawdzanie czy jego wartość zerowa
- 13. Czy istnieje jakaś różnica między "statyczną konstelacją NSInteger" i "statyczną const NSInteger"?
- 14. Sprawdzanie, czy ciąg znaków jest pusty
- 15. Python: sprawdzanie, czy punkt jest wewnątrz wielokąta
- 16. Sprawdzanie, czy obraz jest pusty w C#
- 17. Sprawdzanie, czy wielokąt jest prosty lub złożony
- 18. Sprawdzanie, czy adnotacja jest określonego typu
- 19. Sprawdzanie, czy zmienna POST [] jest adresem IP?
- 20. Sprawdzanie, czy plik cookie jest ustawiony
- 21. Sprawdzanie, czy zmienna jest liczbą całkowitą
- 22. Sprawdzanie, czy pierwsza litera łańcucha jest wielka:
- 23. Sprawdzanie, czy określony typ jest delegatem akcji
- 24. Sprawdzanie, czy Timer Java jest anulowany
- 25. Sprawdzanie, czy tunel SSH jest uruchomiony
- 26. Sprawdzanie, czy plik jest zbiorem .NET
- 27. Sprawdzanie, czy zmienna jest typu danych podwójne
- 28. Java: Sprawdzanie, czy komputer jest bezczynny
- 29. Czy sprawdzanie poprawności JavaScript jest złe?
- 30. Sprawdzanie, czy rok jest skok z C#
Nie działa też. http://cl.ly/c7k. – Joshua
coś musi być nie tak z definicją zmiennej "integer".W każdym razie lubię odpowiedź Horace'a więcej – Vladimir
Definicja to: \t 'NSInteger * integer;' – Joshua