0

问题

假设int childCount = linearLayout.getChildCount()返回一个数字,它是三加一的倍数,例如4, 7, 10, 13...。

我想将其加二childCount并将其除以三以获得我想要的列表数量的结果,例如(7 + 2) / 3应该给出答案3,但我不知道它是否会24仅仅是因为执行浮动操作时的错误. 所以我这样做是为了确保我得到3结果:

int numberOfCells = (int) ((linearLayout.getChildCount() + 2) / 3 + 0.5f);

这是对的吗?


更新

因为在每个相对布局(也是线性布局的子布局)之后,我的线性布局中有两个子视图(行)。但是最后一个相对布局没有后面的行。所以我想得到相对布局的数量,这也是我要制作的列表的单元格数量。


更新 2

是那种说法,

int numberOfCells = (int) ((linearLayout.getChildCount() + 2) / 3 + 0.5f);

相当于

int numberOfCells = (int) Math.floor((linearLayout.getChildCount() + 2) / 3 + 0.5f);
4

1 回答 1

2

是那种说法,

int numberOfCells = (int) ((linearLayout.getChildCount() + 2) / 3 + 0.5f);

相当于

int numberOfCells = (int) Math.floor((linearLayout.getChildCount() + 2) / 3 + 0.5f);

是的。

推理:

两个方程的共同部分是:

(linearLayout.getChildCount() + 2) / 3 + 0.5f

让我们评估一下所有可能的结果。

此处:linearLayout.getChildCount() + 2将始终为+ve integer. (linearLayout.getChildCount() + 2) / 3将评估为zero(当linearLayout.getChildCount()返回zero) 或+ve integer. 将0.5f添加到zero或 a+ve integer将导致0.5f+x.5f(其中x是一些 +ve 整数)。

因此,(linearLayout.getChildCount() + 2) / 3 + 0.5f的结果将是(0.5f or +x.5f)

现在,在 的情况下first equation,我们有:(int)(0.5f or +x.5f)。将 afloat或 adouble转换为 anint返回 float 或 double 的整数部分。

第一个方程的可能结果:(0 or +x)

对于second equation,我们有:(int) Math.floor(0.5f or +x.5f)Math.floor(double)返回小于或等于参数的最大正整数值。因此,Math.floor(0.5f or +x.5f)将是:(closest +ve integer less than 0.5f) = 0.0OR (closest +ve integer less than +x.5f) = +x.0。将它们转换为int将导致(0 或 +x)。

第二个等式的可能结果:(0 or +x)

两个方程的计算结果相同。因此,它们是等价的。


如何使用remainder?例如,假设:

int remainder = (linearLayout.getChildCount()) % 3;

int numberOfCells;

switch (remainder) {
    case 1:
        // linearLayout.getChildCount() returned 1, 4, 7, 10......
        numberOfCells = (linearLayout.getChildCount() + 2) / 3;
        break;
    case 2:
        // linearLayout.getChildCount() returned 2, 5, 8, 11......
        numberOfCells = (linearLayout.getChildCount() + 1) / 3;
        break;
    default:
        // linearLayout.getChildCount() returned a (+ve) multiple of 3......
        numberOfCells = (linearLayout.getChildCount()) / 3;
        break;
}
于 2013-08-09T08:45:11.483 回答