【问题标题】:Why is this for loop not looping more than once?为什么这个 for 循环不循环多次?
【发布时间】:2013-11-06 20:40:11
【问题描述】:

我目前还在学习java,所以这可能只是一个业余错误

其目的是“for”循环会在给定不同高度的条形图上绘制一个“条形图”数组(为糟糕的格式道歉)

static int[]cwMarks = new int[4];
static int[]examMarks = new int[4];
static int barWidth = 4; //Standard bar width
private static int posX = -15; //Decides X position of bar
private static int posY= 210; //Decides Y position of bar
static int barCount = 8; //Tracks number of bars needing to be drawn
static Bar[] barArr = new Bar[barCount]; //Array storing Bars

    cwMarks[0]=50;
    cwMarks[1]=100;
    cwMarks[2]=20;
    cwMarks[3]=100;
    examMarks[0]=50;
    examMarks[1]=100;
    examMarks[2]= 20;
    examMarks[3]= 30;
    draw();

public static void draw()
{

    for (int i=0,j=0;i<barCount;j++) //i represents the element of barArr, j represents element of cwMarks/examMarks
    {


        barArr[i].moveHorizontal(posX);
        barArr[i].changeSize(barWidth, cwMarks[j]);
        barArr[i].moveVertical(posY-cwMarks[j]);
        barArr[i].makeVisible();
        i++;

        barArr[i].moveHorizontal(posX+barWidth+1);
        barArr[i].changeSize(barWidth, examMarks[j]);
        barArr[i].moveVertical(posY-examMarks[j]);
        barArr[i].makeVisible();
        i++;

        posX=+5;

    }

}

` 

我假设这将创建 4 对 2 条,但循环似乎只执行它的代码两次(产生 2 对 2)。这是绘制的:

关于为什么会这样的任何想法?

【问题讨论】:

  • 你确定它不是画 8 条吗? 1 向上,1 向下(在同一个 x 轴点),2 向上,2 尺寸为 0,2 向上是 8 条。
  • 您考虑过使用调试器吗?或者至少在你的循环中添加一些 system.out?
  • 哦,你每次循环都会使 i 的值加倍。
  • 请在每个 i++ 之前插入类似 System.out.println("Created bar "+i+" at "+&lt;horizontal_position&gt;+", "+&lt;vertical position&gt;); 的内容,其中这些位置是来自 moveHorizo​​ntal 和 moveVertical 的位置。这应该有助于了解循环是否正确运行。
  • 通过调试器运行它,或者在循环中打印出一些东西,这样你就可以看到你在哪里。

标签: java arrays for-loop


【解决方案1】:
(int i=0,j=0;i<barCount;j++)

看看吧。 J++? 不应该是:

for (int i=0;i<barCount;i++)

【讨论】:

  • 他确实在for() 循环旁边的评论中定义了j 的用途。
  • 嗯,他确实在循环体中增加了 i 两次。不是一个好习惯。
【解决方案2】:

将posX=+5 更改为posX+=10(或posX+=15,具体取决于您希望它的外观)。您的代码有 2 个错误:

  1. 您每次都将 posX 设置为 5,而不是递增它。
  2. 您将其增加的数字太小。即使修复了第一个错误,在第一个循环期间,您在 xPos -15 和 -10 处绘制条形图,然后将 xPos 增加到 -10 并在 xPos -10 和 -5 处绘制条形图(请参阅:您已经绘制了两次 -10已经)

【讨论】:

  • 是的,就是这样,编译器可能将posX=+5 解释为posX=5,这是有道理的,因为它是“正5”。这就是它仍然编译的原因。
  • 不,我改变了它,4 个小节都聚集在一起,而不是 2 号和 3 号被隔开(似乎它只是忽略了它)
【解决方案3】:

难怪你得到了很多没有答案的观点。我也说不出来。这里有一些提示。

把你的代码放在一个方法中,而不是让一切都变成静态的。如果没有别的,请尝试 public void run() {}。在 main 中创建一个实例并调用 run。

不要在循环外更新 for 循环中的变量。在更大的循环中,这会令人困惑。

尝试使用两个 for 循环,而不是您现在拥有的 kloogie。

通过删除图形代码并仅使用有意义的消息执行 System.out.println() 来测试循环逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多