我要对魔方进行一系列移动,即:

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/

10-10 06:47