这是应该生成6列而不是生成5列的代码。 请指出由于无法获得所需输出而导致的代码中的任何逻辑错误。
sem1Data= new String[18];
sem2Data= new String[18];
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int stdA = 0, stdB = 0;
int counter = 0;
int colCounter = 1;
LabName = editText.getText().toString();
setLabRef = database.getReference("/" + LabName);
String colName;
for (int i = 0; i <6; i++) {
colName = "col" + colCounter;
//Toast.makeText(Activity1.this, colCounter, Toast.LENGTH_SHORT).show();
if ( colCounter%2 == 0) {
for ( ; stdB<18; stdB++)
{
if(counter<6)
{
setLabRef.child(colName).child(String.valueOf(counter)).setValue(sem2Data[stdB]);
counter++;
}
else
{
counter=0;
colCounter++;
break;
}
}
}
else {
for ( ; stdA<18; stdA++)
{
if (counter<6){
setLabRef.child(colName).child(String.valueOf(counter)).setValue(sem1Data[stdA]);
counter++;
}
else {
counter=0;
colCounter++;
break;
}
}
}
}
}
});
预期结果应该是在Firebase中生成了6列,但是只生成了五列。
答案 0 :(得分:0)
在第一个循环中,将更改验证块更改为i <= 6或i <7
for(int i = 0; i <= 6; i ++)
UPD: if(counter <7)
答案 1 :(得分:0)
我不确定您的代码的目的是什么,但这是我的意见,它可能有助于您清除内容。
如果将添加行Log.d(TAG, "Log track : stdB : " + stdB +" stdA : " +stdA);
在for循环的开始,您将看到stdA
和stdB
的值从未设置为零,因为它们一直在增加根据代码的逻辑,实际上两者都以值结尾:
Log track : stdB : 12 stdA : 18
现在,如果您查看colCounter = 5 , i = 4
的值stdA is 12
的情况
。
那意味着else
部分的for循环将仅运行(colCounter mod 2 is not zero
)6次,并且这样将无法执行:
else
{
counter=0;
colCounter++;
break;
}
从而使您错过了colCounter
从5
到6
的增长。