我要对魔方进行一系列移动,即:
String[] clockwiseMoves = new String[6];
从而将移动标记为F(前),R(右),U(上),L(左),B(后),D(下)(例如,执行F时,您要旋转F的前表面顺时针方)。给定实例化
Rubik
(来自Rubik类)的实例,我希望它执行我的clockwiseMoves
数组中的每一步。在我的Rubik课上,我有以下方法:
public Rubik frontfaceRight()
:将Rubik的正面向右旋转,并返回已旋转的Rubik的新实例。public Rubik rightfaceRight()
:将Rubik的右面向右旋转,并返回已旋转的Rubik的新实例。public Rubik upfaceRight()
:将Rubik的上表面向右旋转,并返回已旋转的Rubik的新实例。public Rubik leftfaceRight()
:将Rubik的左面向右旋转,并返回已旋转的Rubik的新实例。public Rubik backfaceRight()
:将Rubik的背面向右旋转,并返回已旋转的Rubik的新实例。public Rubik downfaceRight()
:将Rubik的下表面向右旋转,并返回已旋转的Rubik的新实例。鉴于这些,我提出了以下建议:
for (int j = 0; j<clockwiseMoves.length; j++){
if (cwMethods[j].equals("F")){
originalRubik.frontfaceRight();
}
else if (cwMethods[j].equals("R")){
originalRubik.rightfaceRight();
}
else if (cwMethods[j].equals("U")){
originalRubik.upfaceRight();
}
else if (cwMethods[j].equals("L")){
originalRubik.leftfaceRight();
}
else if (cwMethods[j].equals("B")){
originalRubik.backfaceRight();
}
else if (cwMethods[j].equals("D")){
originalRubik.downfaceRight();
}
}
System.out.println(originalRubik);
但是,我的打印输出在经过for循环之前为我提供了初始
Rubik
,这意味着未执行for循环中的方法。我可以知道如何更正我的代码吗? 最佳答案
您提到那些方法返回了Rubik
的新实例,因此当您在if-else
块中处理动作时,您并未将新实例分配给originalRubik
变量,它仍然指向Rubik
的初始实例。 >。
因此,您需要捕获Rubik
的新实例并将其分配给originalRubik
变量以查看更改。
for (int j = 0; j<clockwiseMoves.length; j++){
if (cwMethods[j].equals("F")){
originalRubik = originalRubik.frontfaceRight();
}
else if (cwMethods[j].equals("R")){
originalRubik = originalRubik.rightfaceRight();
}
else if (cwMethods[j].equals("U")){
originalRubik = originalRubik.upfaceRight();
}
else if (cwMethods[j].equals("L")){
originalRubik = originalRubik.leftfaceRight();
}
else if (cwMethods[j].equals("B")){
originalRubik = originalRubik.backfaceRight();
}
else if (cwMethods[j].equals("D")){
originalRubik = originalRubik.downfaceRight();
}
}
System.out.println(originalRubik);
关于java - 方法不在for(if-else)循环中执行,并向我返回原始对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55206278/