#objective-c #methods #nsmutablearray #ddmathparser
#objective-c #методы #nsmutablearray #ddmathparser
Вопрос:
Я генерирую случайное уравнение, например 2*3 4….. и использовать DDMathParser для его оценки. Здесь у меня есть метод класса, который должен возвращать случайное уравнение (хранящееся внутри изменяемого массива), только если оно вычисляется до целого числа. однако он продолжает возвращать значение Null, и я не могу понять, почему. Пожалуйста, помогите мне.!
#import "Equation.h"
#import "DDMathParser.h"
@implementation Equation
-(NSMutableArray*)randEquation{
NSMutableArray* usableEquation=[[NSMutableArray alloc]init];
while(1){
NSArray *nums = @[@"1", @"2", @"3", @"4", @"5",@"6",@"7",@"8",@"9"];
unsigned index1=arc4random()%9;
NSString* num = [NSString stringWithFormat:@"%@", [nums objectAtIndex:index1]];
NSArray *symbols = @[@" ", @"-", @"*", @"/"];
unsigned index=arc4random()%4;
NSString* symb = [NSString stringWithFormat:@"%@", [symbols objectAtIndex:index]];
NSMutableArray *arrayOfSymbolsAndNumbers = [[NSMutableArray alloc] init];
for( int i=0;i<=10;i ){
if (i%2==0) {
[arrayOfSymbolsAndNumbers addObject:num];
}
else{
[arrayOfSymbolsAndNumbers addObject:symb];
}
}
NSMutableString *stringOfSymbolsAndNumbers=[[NSMutableString alloc]init];
for (NSObject * obj in arrayOfSymbolsAndNumbers)
{
[stringOfSymbolsAndNumbers appendString:[obj description]];
}
usableEquation=arrayOfSymbolsAndNumbers;
NSNumber *result=[stringOfSymbolsAndNumbers numberByEvaluatingString];
float resultFloat = [result floatValue];
float checker=resultFloat;
if (floor(checker)==checker) {
break;
}
else{
continue;
}
}
return usableEquation;
}
@end
Комментарии:
1. Как вы проверяете
nil
возврат? Какую отладку вы выполнили?2. В раскадровке я попробовал NSLog с возвращаемым массивом, используя NSLog(@»Содержимое массива равно%@», [рандомизация уравнения]); и вывод на моей консоли: содержимое массива равно (null). Также я устанавливаю заголовки некоторых кнопок на содержимое этого массива, и заголовки не устанавливаются.
3. В предыдущем комментарии в: NSLog(@»Содержимое массива равно%@», [рандомизация уравнения]); «уравнение — это просто экземпляр моего класса «Equation».
4. Узнайте, как выполнять отладку. Начните с точки исключения, выясните, какое значение равно нулю, и возвращайтесь к тому месту, где это значение генерируется.
Ответ №1:
NSLog(@»Содержимое массива равно%@», [рандомизация уравнения]);
Исходя из вашего кода, для вывода этого журнала The content of array is(null)
equation
значение равно нулю. Ваш randEquation
(хотя и неэффективный) выглядит нормально, проблема в том, что вы не создали equation
экземпляр при запуске инструкции log.