当前位置: 首页 > 知识库问答 >
问题:

方法不在for(if-else)循环中执行,并返回原始对象

魏彦
2023-03-14

我有一个数组的动作要做一个魔方,即:

String[] clockwiseMoves = new String[6];

由此移动被表示为F(前)、R(右)、U(上)、L(左)、B(后)、D(下)(例如,当执行F时,你要顺时针旋转立方体的正面)。给定一个实例化的< code>Rubik(来自Rubik类),我希望它执行my clockwiseMoves数组中的每个移动。

在我的魔方课上,我有以下方法

> < Li > < p > < code > public Rubik front face right():将Rubik的正面向右旋转,并返回已旋转的Rubik的新实例。

public Rubik rightfaceRight():将Rubik的右侧旋转到右侧,并返回已旋转的Rubik新实例。

< code > public Rubik upface right():将Rubik的上表面向右旋转,并返回已旋转的Rubik的新实例。

公共魔方 leftfaceRight():将魔方的左脸向右旋转,并返回一个已旋转的魔方新实例。

public Rubik backfaceright():将Rubik的背面向右旋转并返回已旋转的Rubik的新实例。

公共魔方下脸Right():将魔方的下脸向右旋转,并返回一个已旋转的魔方新实例。

鉴于这些,我想出了以下几点:

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循环中的方法没有被执行。我可以知道如何更正我的代码吗?

共有1个答案

邹英光
2023-03-14

您提到这些方法返回< code>Rubik的新实例,因此当您处理< code>if-else块中的操作时,您并没有将新实例赋给< code>originalRubik变量,它仍然指向< code>Rubik的初始实例。

因此,您需要捕获<code>Rubikvaraible以查看更改。

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);
 类似资料:
  • 问题内容: 我有一个打开文件的代码,计算中值并将该值写入单独的文件。一些文件可能是空的,因此我编写了以下循环来检查文件是否为空,如果是,请跳过它,增加计数并返回循环。它对找到的第一个空文件执行预期的操作,但对第二个不执行预期的操作。循环在下面 输出如下 第二个问题是,t以某种方式从小数点后一位上升到15位,而最后一位似乎增加了小数位?感谢您提供的所有帮助 编辑 该错误 似乎仅适用于仅使用一行示例的

  • 本文向大家介绍C#中for循环、while循环循环执行的方法,包括了C#中for循环、while循环循环执行的方法的使用技巧和注意事项,需要的朋友参考一下 先给大家介绍下C#中的循环执行for循环 在这一节练习中,我们向大家介绍一下C#中的另一种重要的循环语句,for循环。 表达式1:一般为赋值表达式,给控制变量赋初值; 表达式2:逻辑表达式,循环控制条件;当条件为真时,循环执行循环体中的语句。

  • 问题内容: 我有下面的简单代码,我试图将其转换为功能样式 是否可以轻松地用流替换此循环?我看到的唯一选择是使用两个不同的过滤条件在流上迭代两次。 问题答案: 听起来您可以只使用以下条件: 简短但完整的示例,将短字符串映射为小写,将长字符串映射为大写:

  • 问题内容: 我一直在尝试并行化以下脚本,特别是for循环。我怎样才能做到这一点? 问题答案: 更换 与

  • 问题内容: 今天,有人陪我一起滥用Java 中的关键字。我编写了一个简单的循环来验证数组中是否存在某些内容。假设是一个length数组,这是我的代码: 现在有人告诉我这不是一个很好的编程,因为我在循环内使用了该语句,这将导致垃圾回收发生故障。因此,更好的代码将是: 问题是我无法正确解释为什么第一个for循环不是一个好习惯。有人可以给我一个解释吗? 问题答案: 现在有人告诉我这不是一个很好的编程,因

  • 我想在一个并行外部循环中运行一个包含for循环(应该并行运行)的函数。因此看起来如下所示: 给定上面的代码,我希望在函数中为循环创建5个并行线程,并且希望这5个线程中的每个线程创建另一个线程来运行自己的并行for循环。