【问题标题】:Why won't my for loop stop; despite a boolean expression?为什么我的 for 循环不会停止;尽管是布尔表达式?
【发布时间】:2012-10-03 19:01:08
【问题描述】:

列出的最后一个 for 循环(int 变量 n 和 o).. 我对任何类型的编程都很陌生,在我们的入门课程中,我们使用 Dr Java 和一些基本的媒体材料来制作本质上是龟笔的东西。它在显示器上绘制东西。

我的最后一个 for 循环似乎(在我眼中)说它应该在 n

import Media.*;
import static java.lang.Math.*;

public class DiamondTiles2 {

private TurtleDisplayer display;
private Turtle            steve;

public DiamondTiles2 (){

  display = new TurtleDisplayer();
  steve = new Turtle();
  display.placeTurtle(steve);

  steve.setSpeed(15);
  steve.forward(140);             // Moves Steve to the furthest right he needs to be
  steve.left(PI/2);
  steve.forward((float)1.5*(40*sqrt(3.0)));  // Moves Steve to the top (up 1.5 times the height of a diamond)
  steve.left(PI/6);
  steve.penDown();

  for (int m=1 ; m<=4 ; m++){
    for (int j=1 ; j<=7 ; j++){  //Diamond Drawing
      steve.forward(40);
      steve.left(2*PI/3);        
      steve.forward(40);
      steve.left(PI/3);
      steve.forward(40);
      steve.left(2*PI/3);
      steve.forward(40);
      steve.left(PI/3);
      for (int i=1 ; i<=1 ; i++){
        steve.penUp();
        steve.left(PI/3);
        steve.forward(40);
        steve.right(PI/3);
        steve.penDown();
        for (int k=1 ; j>=7 ; k++){
          for (int n=1, o=1 ; n<=o ; n=n+2){
            steve.right(7*PI/6);
            steve.forward((float)40*(sqrt(3.0)));
            steve.left(PI/2);
            steve.forward(280);
            steve.left(2*PI/3);*
          }
        }
      }
    }
  }  
  display.close();
};

基本上最终的结果应该是最后一个循环 (n,o) 每 7 个循环 j 只启动一次。它所做的是绘制 7 颗钻石,然后 n,o 循环将其向下移动以开始新的一行,然后它会再画 7 颗钻石!但它只是无限期地上下移动..

【问题讨论】:

    标签: java drjava


    【解决方案1】:

    你检查j而不是k

    这个:for (int k=1 ; j&gt;=7 ; k++)

    应该是:for (int k=1 ; k&lt;=7 ; k++)

    此外,您不会增加 o,因此它始终为零,并且最内层的循环每次只运行一次。

    【讨论】:

    • 其实应该是k&lt;=7的可能性更大
    • @vandey - 我同意,我将其添加为附注,因为这意味着内部循环将仅运行一次
    • 仍然无法正常工作.. 不知道这只是我没有按照您的说法正确执行,还是我没有正确解释自己。让我试着提出一个不同的问题:是否有可能有一个明确的布尔表达式?换句话说 n=1.. 不是 n>=1 或 n" 或 "
    【解决方案2】:

    看看你的这个循环:

    for (int k=1 ; j>=7 ; k++) {
        ...
    }
    

    j7 的值时,这个循环永远不会结束,因为它里面的j 没有改变。

    【讨论】:

    • 对不起;你能澄清你的意思吗?有没有办法让 j 改变?
    • 嗯.. 有点接受了这个建议,它解决了我的第一个问题,但又创造了另一个问题。我将:for (int k=1 ; j&gt;=7 ; k++){ 更改为:for (int k=1 ; j&gt;=7 ; j=j-7){
    • 因此,每次它达到 7 时,它都会运行最内层循环一次,然后将 j 重置为 1 从而重复自身......但现在它不会停止绘制行......所以它的工作但又一次不会停止。我认为最外面的(“m”)for循环会阻止它,但它不会......
    【解决方案3】:

    休息时间在哪里?

    for (int k=1 ; j>=7 ; k++){
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      • 2013-10-17
      • 2016-01-19
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多