2014-01-15 6 views
-1

Я создаю случайный генератор строк для удовольствия. По какой-то причине программа не использует максимальные числа I, предусмотренных в nextInt(). Как ни странно, единственный nextInt(), который работает должным образом space. Вот мой код:Java nextInt() генерирует отрицательные числа

public class LineFractal extends Applet { 
Random rnd = new Random(); 
int width = 640; 
int height = 640; 
int x = 1000; 
int endy1 = rnd.nextInt(320); 
int endx1 = rnd.nextInt(320); 
int starty1 = rnd.nextInt(320); 
int startx1 = rnd.nextInt(320); 
int space = rnd.nextInt(25); 
public void init() { 
    setSize(width, height); 
    Frame c = (Frame)this.getParent().getParent(); 
    c.setTitle("Line Generator"); 
} 
public void paint(Graphics g) { 
    while (x > 0) { 
     x -= 1; 
     g.drawLine(startx1, starty1, endx1, endy1); 
     endy1 += space; 
     endx1 -= space; 
    } 
    g.drawString("Space: " + space, width-100, height-10); 
    g.drawString("Y (End): " + endy1, width-100, height-20); 
    g.drawString("Y (Start): " + starty1, width-100, height-30); 
    g.drawString("X (End): " + endx1, width-100, height-40); 
    g.drawString("X (Start): " + startx1, width-100, height-50); 
} 
} 

Почему он делает это?

РЕДАКТИРОВАТЬ: Просто запустите его снова, и X (Пуск) и Y (Пуск) работают, но целые числа (End) этого не делают. Они будут генерировать абсолютно случайное число, иногда низкое как -21842. Но они не всегда отрицательны.

+5

Вы уверены, что это не переполнение? Ваш цикл while работает 1000 раз, и вы добавляете пространство для endy1 на каждой итерации. –

+0

Попробуйте распечатать 'endy1',' endx1' и т. Д. _Before_ ваш while-loop. Похоже, вы изменяете 'endy1' и' endx1' в своем while-loop (который выполняется 1000 раз). –

+2

Я не думаю, что ваше описание точнее; вы говорите, что 'nextInt()' возвращает отрицательные числа, но вы не объяснили, где вы якобы видите их. – chrylis

ответ

9

Java nextInt() генерирует отрицательные числа

Нет, nextInt() - так, как вы вызываете его - не возвращает отрицательные числа.

Ваш цикл, который многократно вычитает space из endx1, является причиной того, что endx1 станет отрицательным.

+0

Я считаю, что nextInt() генерирует отрицательные числа nextInt (int), с другой стороны .... – gtgaxiola

+0

+1 @NPE спасибо за разъяснение: D – gtgaxiola

6

факты:

  • endx1 может иметь начальное значение между 0 и 319.
  • space может иметь значение от 0 до 24.
  • x начинается при 1000

Once для каждого x вы уменьшаете endx1 на space, что означает, что он может достигать значений как минимум a с 0 - (1000 * 24) = -24000 или выше 319 - (1000 * 0).

Итак, в сущности, ваш код является слишком сложным способом присвоить endx1 случайное значение от -24000 до 319. Конечно, он будет отрицательным большую часть времени.

0

Вы можете использовать:

Random rnd = new Random(); 
int posRandomInt = rnd.nextInt(Integer.MAX_VALUE); 

Integer.MAX_VALUE является постоянным держит максимальное значение INT может иметь, 2 -1.

Смежные вопросы