这段代码生成5列,包含6个孩子,但是根据此代码,它应该生成6列。问题是什么?

时间:2019-06-15 19:51:30

标签: android firebase firebase-realtime-database

这是应该生成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列,但是只生成了五列。

firebase screenshot

2 个答案:

答案 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循环的开始,您将看到stdAstdB的值从未设置为零,因为它们一直在增加根据代码的逻辑,实际上两者都以值结尾:

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

从而使您错过了colCounter56的增长。