for循环未按预期运行

时间:2016-10-19 07:27:09

标签: android

晚安。

我有一个for循环来计算一周内的某些值,在几周内。我的代码将星期几与已过去的天数进行比较。

仅当workdaytotdays相同时,才会在星期一正常工作。其余时间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);

2 个答案:

答案 0 :(得分:1)

您的第一个循环条件写错了,您只要求workdays = totdias才能运行。我想你想从工作日到totdias每天循环 所以纠正这个块:

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

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

PS:

您当前的循环就像写作

if(workdays == totdias) {

答案 1 :(得分:1)

  • 您应该提供更多代码,因为我们无法理解您的PrefProteos类,可能错误就在那里。
  • 您还应该添加完整的logcat
  • 你应该告诉我们哪一行会引发错误。

无论如何都有一些错误:

下面

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

如果equals条件和循环变量都相同,则没有在for循环退出条件中使用equals条件的意义,因为它将导致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没有被证实

在循环中

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);

两个选项:

  • promidiastotact0。你不能number/0
  • 如上所述,promdias可能在一周中的其他日子没有被证实,因为for循环永远不会运行

顺便说一下,float name = 0;并不完美,请将其更改为float name = 0f;