Java for循环 - (i * 16)对i的所有值求值为0

时间:2012-11-09 18:54:32

标签: java for-loop slick2d

可能遗漏了一些基本的东西,但我的程序中有一个for循环,它应该迭代一个数组(lines[])并在屏幕上绘制它们(使用LWJGL / Slick)。
它们不是在单独的行((i*16 + 7, 5))上显示,而是显示在(7, 5)

for(int i = 0; i < lines.length; i++) {
  if(lines[i] != null) {
    f.drawString((i * 16) + 7, 5, lines[i]);
  }
}

我已经看到其他问题的答案,建议在循环中定义最终变量,以避免在被调用函数使用它之前更改值。所以我把代码更改为:

for(int i = 0; i < lines.length; i++) {
  if(lines[i] != null) {
    final int i2 = i;
    f.drawString((i2 * 16) + 7, 5, lines[i]);
  }
}

但它没有解决它(并没有真正期望它,因为我没有被卡在i的最后一个值上而且Slick不应该存储i的值,但是试图确保它)。


drawString的标题如下:

public void drawString(float x, float y, String whatchars)

2 个答案:

答案 0 :(得分:2)

我想我的评论提供了答案,所以我会发帖给别人帮忙。

正确的调用是将偏移量放在函数的 y 参数中:

f.drawString(7, (i * 16)+5, lines[i]);

由于函数定义是:

public void drawString(float x, float y, String whatchars)

答案 1 :(得分:0)

我认为您需要更改y坐标而不是x,如下所示:

for(int i = 0; i < lines.length; i++) {
  if(lines[i] != null) {
   f.drawString(7, (i * 16) +5, lines[i]);
  }
 }

这将打印来自x = 7y varying from 5 to 20的行。