2013-12-08 3 views
0

Я пытаюсь создать приложение iOS, где пользователь отвечает на некоторые вопросы. Пользователь задает вопрос, и он собирается варьироваться от 1 до 5. Когда пользователь ответил на 30 вопросов, появится новое представление, в котором пользователь может увидеть, сколько очков он сделал, и результат - текст, основанный на точках.If-statement не работает

Моя проблема в том, что когда я использую инструкцию if-else, я всегда получаю результат-текст для самой низкой суммы.

int intSum = [self.sumFromList intValue]; 
if (intSum >= 135) { 
    NSLog(@"135"); 
} else if ((intSum >= 120) && (intSum <= 134)) { 
    NSLog(@"120 - 134"); 
} else if ((intSum >= 105) && (intSum <= 119)) { 
    NSLog(@"105 - 119"); 
} else if ((intSum >= 90) && (intSum <= 104)) { 
    NSLog(@"90 - 104"); 
} else if (intSum <= 89) { 
    NSLog(@"89 or less"); 
} else { 
    NSLog(@"Error"); 
} 

Может ли кто-нибудь увидеть, что я пишу неправильно, или кто-нибудь знает о каких-либо других функциях? Вместо NSLog я создал два массива, которые генерируют результат и диапазон-текст ([self.result objectAtIndex:0];. Конечно, 0 будет изменен на основе суммы) и разных текстовых цветов.

EDIT: Это, как я вычислить точки: Если пользователь может выбрать две точки:

- (IBAction)twoPointsButton:(id)sender { 
[self addPointsToList:2]; 
} 

- (void)addPointsToList:(NSInteger)points { 
questionID = questionID + 1; // Used to get the question from array 
questionNo = questionNo + 1; // Used to get question number in title 
listPoints = listPoints + points; // Calculate the points 

if (questionID == numberOfQuestions) { 
    ResultView *resultView = [[ResultView alloc] initWithNibName:@"ResultView" bundle:nil]; 
    resultView.sumFromList = [NSString stringWithFormat:@"Sum: %i",listPoints]; 

    questionID = 0; 
    questionNo = 1; 
    listPoints = 0; 
    self.title = [NSString stringWithFormat:@"Spørsmål %i/%i",questionNo,numberOfQuestions]; 
    self.question.text = [questions objectAtIndex:questionID]; 

    [self presentViewController:resultView animated:YES completion:nil]; 

} else { 
    self.question.text = [questions objectAtIndex:questionID]; 
    NSString *newTitle = [NSString stringWithFormat:@"Spørsmål %i/%i",questionNo,numberOfQuestions]; 
    self.title = newTitle; 
} 

}

+5

Какова ценность 'intSum', дающая вам неожиданный выход журнала? Другими словами, в инструкции 'if' нет ничего плохого. Проблема, скорее всего, в том, как вы вычисляете 'intSum'. – rmaddy

+0

Эти заявления [кажется, неверно работают сегодня] (http://stackoverflow.com/questions/20457487/c-for-loop-not-working#comment30566703_20457487). –

+0

@rmaddy $ 20, что это целое деление ...>.< –

ответ

0

На основе вашего обновленного кода проблема понятна. Ваш sumFromList представляет собой строку в виде Sum: x, где x - это сумма.

Почему бы вам не сделать sumFromList фактическое свойство int вместо строки. Затем вы можете работать с номером по мере необходимости. Если вам нужно показать значение на контроллере представления, у вас всегда есть возможность конвертировать значение int в строку для отображения.

Имея это как действительное число (вместо строки), вы можете выполнить надлежащие проверки значения.

+0

Я этого не видел раньше, и я должен признать, что я чувствую себя глупо. Конечно, я не могу сделать целое число из «Sum: x». Спасибо за помощь! – isimagan

-1

проблемы ветвления часто спутанность || когда необходимо использовать & & или & &, когда || должен быть использован. - Сначала попробуйте очистить инструкцию if.

Если есть проблема, проверьте переменную, входящую в цикл. Нулевое значение, входящее в цикл, всегда по умолчанию имеет самую низкую ветвь.

Если не null, то проверьте, не печатается ли напечатанное значение вне того, что ожидает ваш оператор if. Затем вам нужно решить, следует ли расширять ваш оператор if или изменять входящее значение, чтобы исправить вашу проблему.

Попробуйте это:

int intSum = [self.sumFromList intValue]; 
NSLog (@"received intSum = %d", intSum); 


if (intSum >= 135) { 
    NSLog(@"135"); 
} else if (intSum >= 120) { 
    NSLog(@"120 - 134"); 
} else if (intSum >= 105) { 
    NSLog(@"105 - 119"); 
} else if (intSum >= 90) { 
    NSLog(@"90 - 104"); 
} else if (intSum <= 89) { 
    NSLog(@"89 or less"); 
} else { 
    NSLog(@"Error intSum %d", intSum); 
} 
+0

Это не решит проблему. Хотя изменения в операторах 'if' являются подходящими, они никоим образом не являются проблемой. – rmaddy

+0

Включение NSLog в начало инструкции if проверяет, что оператор if получает то, что, по вашему мнению, получает, и почти наверняка устранит проблему, поскольку это вероятный источник ошибки. –

+0

Как записывать плохое значение, исправить плохое значение? Если вы прочтете обновленный код вопроса и более новые ответы, вы увидите проблему. Это не имеет никакого отношения к утверждению 'if'. Ваш ответ не пытается решить проблему. Дополнительные условия в инструкции 'if' никогда не были проблемой. – rmaddy

0

Что такое sumFromList? Вы устанавливаете текст sumFromList в «Sum:% i», а затем пытаетесь получить его с помощью intValue. Если это метка, которую следует использовать

[sumFromList.text intValue]

, но это также даст вам значение 0, так как текст «Сумма:% я» не может быть проанализирован как целое.

Смежные вопросы