反正如果else语句代替兜兜缩短(Is there anyway to shorten if els

2019-10-17 17:56发布

我有一个在屏幕上运行,停在屏幕中间划伤两次猫。 我当前的代码看起来像

private void scratch(){
for (int i = xPos; i < getWidth(); i+=0) {
    xPos = i;
    // swap images
    if (currentImage == nekoPics[0]) 
        currentImage = nekoPics[2];
    else if (currentImage == nekoPics[2])
        currentImage = nekoPics[4];
    else if (currentImage == nekoPics[4])
        currentImage = nekoPics[5];
    else if (currentImage == nekoPics[5])
        currentImage = nekoPics[4];
    else if (currentImage == nekoPics[4]) 
        currentImage = nekoPics[5];
    else 
        currentImage = nekoPics[0]

有没有使如果else语句不是让他们在这样一个巨大的圆圈会更简单的方法?

在此先感谢(PS:我想你可以用某种形式的反做到这一点,但我不是如何去这个这么肯定,任何帮助表示赞赏)

Answer 1:

你可以保持当前图像的索引,并增加它在每次迭代,比如:

currentImage = nekoPics[currentIndex%6];
currentIndex++;

要么

currentImage = nekoPics[currentIndex];
if (++currentIndex==6) currentIndex=0;

这就要求在nekoPics图像根据动画的顺序进行排序。



Answer 2:

除地图建议的其他地方,你可以只使用一个数组; 你需要保留当前图像的索引的轨迹:

int[5] nextImageList
  = { 2, ?, 4, 5, 4 }

next = nextImageList[currentImageIndex];
currentImage = nekoPics[next];
currentImageIndex = next;

没有“如果”你需要初始化currentImage和currentImageIndex后。 我不知道,如果是1有效的索引的任何地方,如果没有,什么都可以在阵列中的1个插槽去。



Answer 3:

如果你从你的屏幕前获得停止猫它可能会更容易代码...

说真的,不过,你可以通过做一个定义你的照片序列中的对象解决这个问题。



Answer 4:

我要发布类似的答案, rcook ,使用数组。 我认为这是理解的最简单的解决方案。

他的回答,然而,有关于阵列尺寸稍有不慎。 我张贴这种的完整性,但信贷应直接向他。

// Elsewhere, in your initialization:
int currentImageIndex = 0; // Assuming [0] is your first image.
int[] nextImageList = { 2, -1, 4, -1, 5, 4 };
// Given the current index, this array will direct you
// to the next image index. Those -1 are unknown (to us).
// Set them to the values you need.

private void scratch() {
    for (int i = xPos; i < getWidth(); ) {
        xPos = i;

        // Swap images.
        currentImageIndex = nextImageList[currentImageIndex];
        currentImage = nekoPics[currentImageIndex];

        // What else you were doing here.
    }
}


文章来源: Is there anyway to shorten if else statements instead of going in circles