如何跟踪我在数组中的位置

问题描述 投票:0回答:1

我经常发现自己在类中使用数组,并且需要跟踪数组中当前正在使用的值。例如,想象一个具有一系列相机的相机系统,我需要跟踪哪一个当前处于活动状态。我一直这样做的方法是创建数组和一个名为cameraIndex 的int 变量或类似的变量。然后,当我切换数组值时,我会更改cameraIndex的值。这确实有效,但我总觉得可能有更好的方法来做到这一点。似乎没有必要创建额外的变量来跟踪。

这是一个简单的例子:

class Camera{
    // Pretend there's camera logic in here.
}

class User{
    
    public setCamera(Camera newCamera){
        // Logic for having the user look through a new camera.
    }
}

class CameraSystem{
    
    private User user;
    private Camera[] cameraList;
    private int cameraIndex = 0;
    
    
    public void goToNextCamera(){
        
        cameraIndex++;
        user.setCamera(cameraList[cameraIndex]);
    }
}

java arrays optimization design-patterns
1个回答
0
投票

您的方法是正确的,有一种方法可以管理当前活动相机,而无需使用附加变量(例如

i
)显式跟踪其索引。一种方法是直接将当前活动相机的引用存储在
CameraSystem
类中。

class CameraSystem {
    private User user;
    private Camera[] cameraList;
    private Camera activeCamera; // Store the reference (not index) of the camera

    public CameraSystem(User user, Camera[] cameraList) {
        this.user = user;
        this.cameraList = cameraList;
        this.activeCamera = cameraList[0]; 
        // basic setup
    }

    public void goToNextCamera() {
        int nextIndex = (getIndex(activeCamera) + 1) % cameraList.length; // This is where you can store the next camera in its new index.
        activeCamera = cameraList[nextIndex];
        user.setCamera(activeCamera);
    }

    private int getIndex(Camera camera) {
        for (int i = 0; i < cameraList.length; i++) {
            if (cameraList[i] == camera) {
                return i;
            }
        }
        return -1; // If camera isn't there
    }
}

这里,在

CameraSystem
类中,它直接存储对活动相机(
activeCamera
)的引用。当您想要切换到下一个摄像机时,您可以迭代
cameraList
数组以查找当前活动摄像机的索引,然后移动到下一个索引(当到达数组末尾时进行循环迭代)。最后,您更新
activeCamera
参考并为用户进行设置。这种方法避免了对像
cameraIndex
这样的额外变量的需要。

© www.soinside.com 2019 - 2024. All rights reserved.