晚安。
我有一个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 :(得分: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
类,可能错误就在那里。无论如何都有一些错误:
下面
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);
两个选项:
promidias
或totact
为0
。你不能number/0
promdias
可能在一周中的其他日子没有被证实,因为for循环永远不会运行顺便说一下,float name = 0;
并不完美,请将其更改为float name = 0f;