2016-10-19 2 views
0

Спокойной ночи.Для петли не действует как ожидалось

У меня есть цикл 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); 
+0

Можете ли вы разместить логарифм? – adalPaRi

+0

'for (int y = workdays; y == totdias; y ++) {', так как вы просите использовать цикл только когда 'workdays == totdias', я бы предположил, что это может быть вашей проблемой;) – AxelH

ответ

1

Вы должны написать первое условие цикла не так, спросите вы только запустить только если workdays = totdias. Я предполагаю, что вы хотите, чтобы петли для каждого дня от рабочих дней до totdias Так правильно этот блок:

for (int y = workdays; y == totdias;y++) { 

В

for (int y = workdays; y <= totdias;y++) { 

PS:

Ваш текущий цикл, как написание

if(workdays == totdias) { 
1
  • Вы должен предоставить еще один код, потому что мы не можем понять ваш класс PrefProteos и, вероятно, ошибка там.
  • Вы также должны добавить полный logcat
  • И вы должны сообщить нам, какая строка выдает ошибку.

Во всяком случае есть некоторые ошибки:

Здесь

for (int y = workdays;y==totdias;y++){ 

Там нет смысла использовать равенство условия в циклю выхода из состояния, если оба равно условие и циклические переменные являются то же самое, потому что это приведет к циклу if. Это потому, что for будет работать только в том случае, если workdays == totdias с самого начала, это не сработает.

Для условий:

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 не istantiated

В цикле

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 не может быть istantiated в другие дни недели, потому что цикл никогда не запускать

Btw, float name = 0; не является совершенным, изменить их float name = 0f;

+1

Вы определенно сделали больше обзор, чем я! PS: '==' может использоваться в цикле for, но не использовать переменную declare в части декларации конечно (ну, даже это не совсем верно;), но это уродливый код) – AxelH

+0

'if (y == totdias) { // сделать код y ++; } 'не является циклом. Я думаю, что он пытается зациклиться, но его положение неверно. – Doomsknight

+0

@AxelH да, возможно, я неправильно понял ошибку, я объясняю, что, поскольку он написал это, это не цикл, а условие if! спасибо :) –

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