2014-08-31 7 views
-2
Exception in thread "main" java.lang.IllegalArgumentException: n must be positive 
at java.util.Random.nextInt(Unknown Source) 
at net.survival_instincts.src.main.screenClass.<init>(screenClass.java:21) 
at net.survival_instincts.src.main.windowClass.<init>(windowClass.java:28) 
at net.survival_instincts.src.main.windowClass.main(windowClass.java:104) 

КОД:Почему я получаю это сообщение об ошибке?

windowClass:

package net.survival_instincts.src.main; 

import java.awt.Canvas; 
import java.awt.Graphics; 
import java.awt.image.BufferedImage; 

import javax.swing.JFrame; 

import net.survival_instincts.src.graphics.renderClass; 

import java.awt.image.*; 

public class windowClass extends Canvas implements Runnable { 

public static int WIDTH = 854; 
public static int HEIGHT = 480; 

private Thread thread; 
private screenClass screen; 
private BufferedImage img; 
private boolean running = false; 
private renderClass render; 
private int[] pixels; 

public windowClass() { 

    screen = new screenClass(WIDTH, HEIGHT); 
    img = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); 
    pixels = ((DataBufferInt) img.getRaster().getDataBuffer()).getData(); 
} 

private void start() { 

    if (running) 
     return; 
    running = true; 
    thread = new Thread(this); 
    thread.start(); 

    System.out.println("Starting..."); 

} 

@SuppressWarnings("unused") 
private void stop() { 

    if (!running) 
     return; 
    running = false; 
    try { 
     thread.join(); 
    } catch (Exception e) { 

     e.printStackTrace(); 
     System.exit(0); 

    } 

} 

public void run() { 

    while (running) { 
     tick(); 
     render(); 

    } 

} 

private void tick() { 

} 

private void render() { 

    BufferStrategy bs = this.getBufferStrategy(); 
    if (bs == null) { 

     createBufferStrategy(3); 
     return; 

    } 

    screen.render(); 

    for (int i = 0; i < WIDTH * HEIGHT; i++) { 

     pixels[i] = screen.pixels[i]; 

    } 

    Graphics g = bs.getDrawGraphics(); 
    g.drawImage(img, 0 , 0, WIDTH , HEIGHT, null); 
    g.dispose(); 
    bs.show(); 

} 

// Generates The Main Window 
public static void main(String[] args) { 

    windowClass game = new windowClass(); 

    JFrame frame = new JFrame(); 

    frame.pack(); 
    frame.setTitle("Survival Instincts v.0.01"); 
    frame.setSize(WIDTH, HEIGHT); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.add(game); 
    frame.setLocationRelativeTo(null); 
    frame.setResizable(true); 
    frame.setVisible(true); 

    System.out.println("Initializing Startup..."); 

    game.start(); 

} 

public renderClass getRender() { 
    return render; 
} 

public void setRender(renderClass render) { 
    this.render = render; 
} 

} 

renderClass:

package net.survival_instincts.src.graphics; 

public class renderClass { 


public static int width; 
public static int height; 
public final int[] pixels; 

public renderClass(int width, int height) { 

    renderClass.width = width; 
    renderClass.height = height; 
    pixels = new int[width * height]; 

} 

public void draw(renderClass render, int xOffset, int yOffset) { 

    for (int y = 0; y < renderClass.height; y++) { 

     int yPix = y + yOffset; 


     for (int x = 0; x < renderClass.width; x++) { 

      int xPix = x + xOffset; 

      pixels[xPix + yPix * width] = render.pixels[x + y * renderClass.width]; 
     } 

    } 

} 
} 

screenClass:

package net.survival_instincts.src.main; 

    import java.util.Random; 

    import net.survival_instincts.src.graphics.renderClass; 

    public class screenClass extends renderClass { 

    public renderClass test; 

    public screenClass(int width, int height){ 

     super(width, height); 

     Random random = new Random(); 

     test = new renderClass(256, 256); 

     for (int i = 0; i <65536; i++){ 

      test.pixels[i] = random.nextInt(i); 

     } 

    } 

    public void render(){ 

     draw(test, width, height); 

    } 

    } 
+4

Почему вы должны спросить это? Вы не прочитали сообщение об ошибке («n должно быть положительным»)? Разве вы не удосужились прочитать javadoc? Вам нужно сделать ** некоторые ** попытки отладить ваш код, прежде чем задавать вопросы. –

+1

Пожалуйста, открепите свой код. И, пожалуйста, укажите только код, в котором вы получаете ошибку. Я предлагаю вам посетить [как спросить] (http://stackoverflow.com/help/how-to-ask) вопрос. Тогда вы можете писать лучше. Добро пожаловать в StackOverflow. – afzalex

ответ

4

Ваша ошибка: Random.nextInt(0) сделает исключение. Значение, прошедшее до nextInt(), должно быть положительным.

Для того, чтобы исправить это, вам необходимо запустить цикл в i = 1.

+1

Да, прямо в документации. http://www.tutorialspoint.com/java/util/random_nextint_inc_exc.htm –

+0

спасибо @jdphenix за редактирование .. теперь намного понятнее –

0

Random.nextInt() нужен номер, который является положительным, и в этом for loop вы вызываете его с 0:

for (int i = 0; i <65536; i++){ 
    test.pixels[i] = random.nextInt(i); // it will call random.nextInt(0) 
} 
Смежные вопросы