我希望能够通过其索引在数组中的“活动”对象之间进行切换。为此,我需要能够“循环”固定长度为3的对象数组。
当活动对象的第一项和函数switchObject()被调用时,我希望能够将活动对象更改为数组中的第二项。这可能吗?
Inventory inventory = new Inventory(); /* has getObject() */
internal Object activeObject;
public void switchObject()
{
switch (index)
{
/* If active object index is 0, switch active object index to index 1 */
case 0:
index = 1;
activeObject = inventory.getObject(index);
/* If active object index is 1, switch active object index to index 2 */
case 1:
index = 2;
activeObject = inventory.getObject(index);
/* If active object index is 2, switch active object index to index 0 */
case 2:
index = 0;
activeObject = inventory.getObject(index);
}
}
理想的行为是循环数组,例如(其中->是switch())项目1->项目2->项目3->项目1->项目2->项目3->项目1 ....
此代码在VS2017中引发错误,因为“控件不能从一个case标签('case;')掉进去
还有,有没有一种方法可以利用异常(可能是自定义异常?)来检查是否确实存在三个可用于切换的对象?
谢谢!
有没有办法使我的工作正常?
答案 0 :(得分:1)
每个break;
的末尾都缺少case
语句。并且您可以添加一个default
情况,如果索引不在1-3之间,则可以使用该情况引发异常。
switch (index)
{
/* If active object index is 0, switch active object index to index 1 */
case 0:
index = 1;
activeObject = inventory.getObject(index);
break;
/* If active object index is 1, switch active object index to index 2 */
case 1:
index = 2;
activeObject = inventory.getObject(index);
break;
/* If active object index is 2, switch active object index to index 0 */
case 2:
index = 0;
activeObject = inventory.getObject(index);
break;
default:
throw new Exception("Index can only be 1, 2 or 3");
}
注意:default
部分不需要break
语句,因为抛出的异常会中断switch
流。
希望这会有所帮助!