2014-01-15 38 views
-1

我正在製作一個隨機線條生成器以獲得樂趣。出於某種原因,該程序不使用我在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(開始)做的工作,但(結束)整數不。他們會產生一個完全隨機的數字,有時低至-21842。但他們並不總是負面的。

+5

你確定它沒有溢出嗎?您的while循環運行1000次,並且您在每次迭代中爲endy1添加空間。 –

+0

嘗試在while循環之前打印'endy1','endx1'等。它看起來像你修改while循環(運行1000次)中的'endy1'和'endx1'。 –

+2

我認爲您的描述不準確;你說'nextInt()'返回的是負數,但是你沒有解釋你在哪裏看到它們。 – chrylis

回答

9

的Java nextInt()產生負數

沒有,nextInt() - 您呼叫的方式 - 不返回負數。

您的循環從endx1反覆減去space是導致endx1變爲負值的原因。

+0

我相信nextInt()在另一方面會生成負數nextInt(int)... – gtgaxiola

+0

+1 @NPE謝謝澄清:D – gtgaxiola

6

事實:

  • endx1可以具有0和319
  • space之間的初始值可以開始24之間0和
  • x在1000

一旦有一個值對於每個x,您將endx1減少space,這意味着它可以達到最低值s 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。