我得到了一个关于使用按钮切换一些图像的教程,这里是代码
public class MainActivity extends AppCompatActivity {
private static ImageView andro;
private static Button buttonswitch;
int current_image_index = 0;
int[] images = {R.mipmap.andro_img,R.mipmap.apple_image,R.mipmap.ic_launcher,R.mipmap.ic_launcher_round};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonClick();
}
public void buttonClick() {
andro = (ImageView) findViewById(R.id.imageView);
buttonswitch = (Button) findViewById(R.id.button);
buttonswitch.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
current_image_index++;
current_image_index = current_image_index % images.length;
andro.setImageResource(images[current_image_index]);
}
}
);
}
}
我对这部分感到很困惑:
@Override
public void onClick(View view) {
current_image_index++;
current_image_index = current_image_index % images.length;
andro.setImageResource(images[current_image_index]);
我理解的是,一旦我点击按钮,那么int current_image_index将增加1.然后使用images.length模数current_image_index,其中current_image_index的余数除以image.length。例如,我第一次将current_image_index = 0,然后一旦点击,它将是1,然后是current_image_index%image.length = 0.然后是andro.setImageResource(images [0]);
这会一次又一次地重复,因为current_image_index保持为0.那么一旦点击它就会如何不断变化,因为current_image_index%image.length总是会得到0的结果。
答案 0 :(得分:1)
...因为current_image_index%image.length总是会得到0的结果。
不太正确。
模数运算符(%
)计算两个操作数的remainder。这是一种重复的减法。事实上,a % b
你会问自己:
如果我重复从
b
中减去a
,直到该操作无法再进行,那么会保留多少数字?
让我们使用8 % 3
进行测试(a = 8
和b = 3
)。
逻辑上,结果为a % b
的操作r
始终会生成0 <= r < b
。
<强>示例:强>
5%2 = 1(因为4÷2 = 2,余数为1)
17%6 = 5(因为12÷6 = 2,其余为5)
因此,在您的情况下,数组索引始终至少为0
,最多为images.length - 1
。这正是你阵列的有效范围。
假设您有 3 图片,因此images.length
3 。此外,current_image_index
已初始化为 0 。所以你会在开头看到image[0]
。
current_image_index
会增加到1
。然后,应用模数运算:1 % 3 = 1
。current_image_index
会增加到2
。然后,应用模数运算:2 % 3 = 2
。current_image_index
会增加到3
。然后,应用模数运算:3 % 3 = 0
。这意味着指数达到 3 ,但随后由模数运算符立即重置为 0 。在image[2]
之后,显示image[0]
。你看到从0开始而不是1的指数现在正在我们的利益中发挥作用。
答案 1 :(得分:0)
current_image_index % images.length
作为一个模块。
https://en.m.wikipedia.org/wiki/Modulo_operation
所以我认为我们都同意1/2 = 0 R 1
。
在每种编程语言中使用modulo意味着只需占用除法的余数并将其作为操作的结果返回。
所以1 ‰ 2 = 1
而不是零。