#android
#Android
Вопрос:
Спокойной ночи.
У меня есть for
цикл для вычисления некоторых значений в течение недели, в течение нескольких недель. Мой код сравнивает день недели с количеством прошедших дней.
For работает нормально только в понедельник, когда workday
это то же самое, что totdays
. Остаток дней totact
равен 0, и уравнение fianl становится NaN
.
int totdias = PrefProteos.getInt("dia",0);
int totact = 0;
float califtot = 0;
int stateday = 0;
float promdias;
float promcalif;
int workdays;
Date day = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("EE", Locale.US);
String dayweek = formatter.format(day);
if (dayweek.equals("Mon")) {
stateday = 1;
}
else if (dayweek.equals("Tue")) {
stateday = 2;
}
else if (dayweek.equals("Wed")) {
stateday = 3;
}
else if (dayweek.equals("Thu")) {
stateday = 4;
}
else if (dayweek.equals("Fri")) {
stateday = 5;
}
else if (dayweek.equals("Sat")) {
stateday = 6;
}
else if (dayweek.equals("Sun")) {
stateday = 7;
}
if (stateday >= totdias) {
workdays = 1;
promdias = totdias;
} else {
workdays = (totdias - (stateday - 1));
promdias = stateday;
}
for (int y = workdays; y == totdias;y ) {
for (int x = 1; x <= 12; x ) {
String activ=PrefProteos.getString("act" x "-habit", "");
if (!activ.equals("")) {
float notactiv = PrefProteos.getFloat("act" x "-puntdia" y, 0);
califtot = califtot notactiv;
totact = totact 1;
}
}
}
promcalif = califtot / (totact * promdias);
Комментарии:
1. можете ли вы опубликовать logcat?
2.
for (int y = workdays; y == totdias;y ) {
поскольку вы просите использовать цикл только тогда, когдаworkdays == totdias
я бы предположил, что это может быть вашей проблемой 😉
Ответ №1:
Вы неправильно записали свое первое условие цикла, вы запрашиваете только для запуска, только если workdays = totdias
. Я предполагаю, что вы хотите выполнять цикл для каждого дня от рабочих дней до итогов, поэтому исправьте этот блок :
for (int y = workdays; y == totdias;y ) {
В
for (int y = workdays; y <= totdias;y ) {
PS :
Ваш текущий цикл похож на запись
if(workdays == totdias) {
Ответ №2:
- Вы должны предоставить еще немного кода, потому что мы не можем понять ваш
PrefProteos
класс и, вероятно, ошибка там. - Вы также должны добавить полный logcat
- И вы должны сообщить нам, какая строка выдает ошибку.
В любом случае есть некоторые ошибки:
Здесь
for (int y = workdays;y==totdias;y ){
Нет смысла использовать условие equals в условии выхода из цикла for, если оба условия equals и переменная цикла одинаковы, потому что это приведет к циклу if. Это потому, что for будет работать, только если workdays == totdias
с самого начала, в противном случае он не будет работать.
Условия For являются:
for(counter = defaultvalue; condition that if true, makes the loop goes on; what to do each loop end)
Это означает, что ваш код будет выполнять:
is y(workdays) == totdias?
if yes, do the loop
add one to y(workdays)
exit because the condition is no more true
if not, don't run the loop
Итак, вам просто нужно вызвать:
if(y == totdias){
//do code
y ;
}
Но, вероятно, это ошибка, потому что, за исключением понедельника, этот код никогда не будет запущен! так что в другие дни promdias
не установлено
В цикле
for (int x = 1; x<=12; x ){
String activ=PrefProteos.getString("act" x "-habit", "");
if (!activ.equals("")){
//there must be an error here somewhere
float notactiv=PrefProteos.getFloat("act" x "-puntdia" y, 0);
califtot=califtot notactiv;
totact=totact 1;
}
}
И это, должно быть, выдает ошибку.
promcalif = califtot/(totact*promdias);
Два варианта:
promidias
илиtotact
являются0
. вы не можете сделатьnumber/0
- Как было сказано выше,
promdias
может не выполняться в другие дни недели, потому что цикл for никогда не запускается
Кстати, float name = 0;
не идеально, измените их на float name = 0f;
Комментарии:
1. Вы определенно сделали больше обзоров, чем я! PS:
==
можно было бы использовать в цикле for, но, конечно, не используя объявление переменной в части объявления (ну, даже это не совсем верно 😉 но это уродливый код)2.
if(y == totdias){ //do code y ; }
это не цикл. Я думаю, что он пытается выполнить цикл, но его предложение неверно3. @AxelH да, вероятно, я неправильно объяснил ошибку, я редактирую объяснение, что, как он написал, это не цикл, а условие if! спасибо 🙂
4. @Doomsknight извините, я не вижу, где я написал, что if (…) — это цикл, я сказал, что он выполняет цикл с if вместо confition цикла, если вы скажете мне, где я это исправлю! 😉
5. @PierGiorgioMisley Просто я просматриваю ответ. В следующей строке объясняется, что это, вероятно, не то, что он хотел сделать 🙂