2015-05-20 57 views
-4

雖然我正在研究一個模擬骰子的程序,但我遇到了一個問題。 這是我寫的代碼(我知道它不是很好的編程,但我正在學習)。它的工作原理,當然我知道它有一些非常重要的部分,但不是問題。雖然語句錯誤Java

double x ; 
String z ; 
x = Math.random() ; 
z = Double.toString(x) ; 
z = z.substring(2, 3) ; 

while (x>6 || x<1) { 

    x =Math.random() ; 
    z = Double.toString(x); 
    z = z.substring(2, 3) ; 
    x = Integer.parseInt(z); 
} 

z = Double.toString(x); 
z = z.substring(0, 1) ; 

JOptionPane.showMessageDialog(null, "Antal prickar: "+z); 

的問題是,看到我erlier while循環有一個if語句,它幾個星期前的工作,現在當我重寫它不工作的代碼。

double x ; 
String z ; 
x = Math.random() ; 
z = Double.toString(x) ; 
z = z.substring(2, 3) ; 

while (x>6 || x<1) { 

    if (x>6) { 
     x =Math.random() ; 
     z = Double.toString(x); 
     z = z.substring(2, 3) ; 
     x = Integer.parseInt(z); 
    } 
} 

z = Double.toString(x); 
z = z.substring(0, 1) ; 

JOptionPane.showMessageDialog(null, "Antal prickar: "+z); 

任何人都可以解釋爲什麼它不工作,因爲我應該能夠把if語句沒有它給我的錯誤權while循環?

+2

你爲什麼模擬翻滾這樣的骰子? 這條線的確如此:int dice1 =(int)(Math.random()* 6 + 1); – Stultuske

+0

你說,「現在當我重寫代碼時,它不工作」。那是什麼意思?你遇到什麼錯誤或意外的行爲? –

+2

你會得到什麼錯誤?出了什麼問題? – CaffeineToCode

回答

0

看起來你正在使用java.lang.Math.random()來產生一個介於1和6之間的數字。由於random()調用返回一個以0.0到1.0間隔標準化的值,所以你選擇第一個小數作爲候選值,如果它是請重複random()呼叫以獲取新的候選號碼。

在你發送的發佈(你說不工作一)第二片段,格式化表明while環路僅包含if語句,如果x > 6這種說法只會做一些事情,但x永遠超過6的值是0和1之間

您可能忽略的第一塊此行while循環之前:

x = Integer.parseInt(z); 

而且if條件在循環內應被刪除。

編輯:產生1到6之間的隨機值的simpliest一段代碼,我可以件事是:

new java.util.Random().nextInt(6) + 1 
2

假設你以前的代碼是工作(並跳過款式等評論)主要問題似乎是增加的if語句。

考慮這樣的情況,其中x = 0:

while(x > 6 || x < 1)將運行由於滿足該條件時(x是小於1)。

if(x > 6)雖然不滿足(x不大於6),因此x將永遠不會更新,導致無限循環。

順便說一句,我不使用Math.random()而是創造Random一個新實例,然後調用nextInt(6) + 1拿到1和6(包括兩端)之間的隨機整數:

Random rand = new Random(); //you might want to store this elsewhere and reuse the instance 
int dice = rand.nextInt(6) + 1; //done, random integer between 1 and 6