类型不匹配:无法从int转换为布尔值

时间:2013-07-24 17:29:38

标签: java int boolean mismatch

好吧,我试图解决这个问题,但我不能,如果有人可以帮助我......

CODE:

package com.skybox.runordie;

import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferInt;

import javax.swing.JFrame;

public class Game extends Canvas implements Runnable {

  public static final long serialVersionUID = 1L;

  public static final int WIDTH = 160;
  public static final int HEIGHT = WIDTH / 12 * 9;
  public static final int SCALE = 3;
  public static final String NAME = "Run Or Die";

  private JFrame frame;

  public boolean running = false;
  public int tickCount = 0;

  private BufferedImage image = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
  private int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData();


  public Game() {
    setMinimumSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));
    setMaximumSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));
    setPreferredSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));

    frame = new JFrame(NAME);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(new BorderLayout());

    frame.add(this, BorderLayout.CENTER);
    frame.pack();

    frame.setResizable(false);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
  }


  public synchronized void start() {
    running = true;
    new Thread(this).start();
  }

  public synchronized void stop() {
    running = false;
  }

  public void run() {
    long lastTime = System.nanoTime();
    double nsPerTick = 1000000000D/60D;

    int ticks = 0;
    int frames = 0;

    long lastTimer = System.currentTimeMillis();
    double delta = 0;

    while(running) {
      long now = System.nanoTime();
      delta += (now - lastTime) / nsPerTick;
      lastTime = now;
      boolean shouldRender = true;

      while (delta >= 1) {
        ticks++;
        tick();
        delta -= 1;
        shouldRender = true;
      }
      try {
        Thread.sleep(2);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      if (shouldRender) {
         frames++;
         render();
      }
      if(System.currentTimeMillis() - lastTimer > 1000) {
        lastTimer += 1000;
        System.out.println(frames + " frames," + ticks + " ticks.");
        frames = 0;
        ticks = 0;
      }
    }
  }

  public void tick() {
    tickCount++;
    for(int i = 0; pixels.length; i++) {
      pixels[i] = i + tickCount;
    }
}

  public void render() {
    BufferStrategy bs = getBufferStrategy();
    if(bs == null) {
      createBufferStrategy(3);
      return;
    }

    Graphics g = bs.getDrawGraphics();
    g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
    g.setColor(Color.BLACK);
    g.fillRect(0, 0, getWidth(), getHeight());

    g.dispose();
    bs.show();
  }

  public static void main(String[] args) {
    new Game().start();
  }


  public int[] getPixels() {
    return pixels;
  }


  public void setPixels(int[] pixels) {
    this.pixels = pixels;
  }

}

2 个答案:

答案 0 :(得分:5)

你在哪一行得到错误?如果我猜,它就在这里:

for(int i = 0; pixels.length; i++) {
    pixels[i] = i + tickCount;
}

for语句中的第二个子句应该是循环的连续条件,它是一个布尔值。但是,pixels.length不是布尔值,而是整数。我假设您的意图是将该整数与另一个整数进行比较,从而产生一个布尔值:

for(int i = 0; i < pixels.length; i++) {
    pixels[i] = i + tickCount;
}

仅提供一个整数本身并不能告诉循环任何有关连续条件的信息。它需要知道继续循环的条件(否则循环应该结束)。在这种情况下,这种情况是i小于pixels.length

答案 1 :(得分:0)

问题在于以下方法

public void tick() {

           tickCount++;

            for(int i = 0; pixels.length; i++) { // should compare pixels.length to some int to get boolean return

                    pixels[i] = i + tickCount;

            }