假设int childCount = linearLayout.getChildCount()
返回的数字是三加一的倍数,例如4
,7
,10
,13
....
我想向childCount
添加两个并将其除以三,以获得我的列表编号所需的结果,例如(7 + 2) / 3
应该给出3
的答案,但我不知道它是2
还是4
只是因为执行float操作时的错误。所以我这样做是为了确保得到3
作为结果:
int numberOfCells = (int) ((linearLayout.getChildCount() + 2) / 3 + 0.5f);
这是对的吗?
因为在每个相对布局(也是线性布局的子项)后面的线性布局中有两个子视图(线)。但是最后一个相对布局没有后续行。所以我想得到相对布局的数量,也就是我将要制作的列表单元格的数量。
是那个声明吗,
int numberOfCells = (int) ((linearLayout.getChildCount() + 2) / 3 + 0.5f);
相当于
int numberOfCells = (int) Math.floor((linearLayout.getChildCount() + 2) / 3 + 0.5f);
答案 0 :(得分: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
或+ve integer
将导致 0.5f 或 + x.5f (其中x
是一些+ ve整数)。
因此,(linearLayout.getChildCount()+ 2)/ 3 + 0.5f 的结果将是(0.5f或+ x.5f)。
现在,在first equation
的情况下,我们有:(int)(0.5f或+ x.5f)。将float
或double
转换为int
会返回float或double的整数部分。
第一个等式的可能结果:(0或+ x)。
对于second equation
,我们有:(int)Math.floor(0.5f或+ x.5f)。 Math.floor(double)
返回小于或等于参数的最正整数值。因此, Math.floor(0.5f或+ x.5f)将为:(closest +ve integer less than 0.5f) = 0.0
或(closest +ve integer less than +x.5f) = +x.0
。将它们转换为int
将导致(0或+ x)。
第二个等式的可能结果:(0或+ 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;
}