我得到了一个关于使用按钮切换一些图像的教程,这是代码
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。然后对 current_image_index 与 images.length 进行模数,这将使 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的结果。
...因为 current_image_index%image.length 将始终给出 0 的结果。
不太正确。
模运算符 (
%
) 计算两个操作数的 余数。这是一种重复的减法。事实上,有了 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)
20 % 4 = 0(因为 20 ÷ 4 = 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 开始的索引现在对我们有利。
current_image_index % images.length
作为一个模块工作。
https://en.m.wikipedia.org/wiki/Modulo_operation
所以我认为我们都同意
1/2 = 0 R 1
。
在每种编程语言中,取模意味着简单地取除法的余数并将其作为运算结果返回。
所以
1 ‰ 2 = 1
而不是零。