2013-05-12 55 views
-2

我一直在這個項目中嘗試了幾個星期,我必須讓一個類從1-250產生500個隨機數,而在第二個類中,我必須繼承第一個類的屬性並將所有這些數字寫入文本文件中,但是當我遇到問題並且使用它時,我還沒有找到一種方法在線執行。如何讓兩個類在Java中一起工作?

我的第一節課是

import java.util.Random; 

public class GenKeys { 

public static void random(){ 
for (int i = 0; i < 250; i++) { 

int x = (int) (Math.random() * 100); 
} 
} 
} 

和我的第二個代碼

import java.util.Random; 
import java.io.*; 
import java.lang.*; 
public class MainProg extends GenKeys{ 

public static void main(String[] args){ 

    public static void random(){ 
    try { 



BufferedWriter out = new BufferedWriter(new FileWriter("file.txt")); 

out.write(x + System.getProperty("line.separator"));// when i compile the x is not  found!!! 

out.close(); 
} catch (IOException e) { 
System.out.print(e); 
      } 
     } 

我怎樣才能讓兩個班一起工作?

+0

您擴展了GenKeys,但是您在寫入之前從未實際繼承'x'的值。因此,編譯器錯誤... – Tdorno 2013-05-12 14:03:44

回答

0

,我還沒有找到一種方法在網上做到這一點。

我不確定你看起來夠硬。

如何讓你的代碼工作

首先,你想你的方法的類型和名稱更改爲int

public static int randomNum() 

然後,從代碼迴路,並且只返回所產生的隨機數:

return (int)Math.Random() * 100; //By the way there is a Random class. 

random方法,你想要的循環:

for(int x = 0; x < 250; x++) 
{ 
    BufferedWriter out = new BufferedWriter(new FileWriter("file.txt")); 
    out.write(randomNum() + System.getProperty("line.separator")); 
} 

out.close(); 

的與您的代碼有關的各種問題

你在這裏誤用了繼承。你的班級不是GenKey的類型。它只是使用它,所以它應該是你班上的一個領域。其次,一個方法只能返回一個值或一個對象。它不能按原樣返回250個號碼。您將分配250個號碼給x。這隻會存儲生成的最後一個數字。

+0

非常感謝,這工作,我只需要適應其他意見,這是我的迴應,以及它的完美工作吧! – 2013-05-12 15:35:52

4
What am i doing Wrong ? 
  • 您使用繼承,而不是僅僅使用GenKeys實例中MainProg
  • 你保持你的覆蓋隨機值,因爲你只使用一個變量x,當你應該使用例如數組
  • 您在範圍[0..99]創建250個值,而不是在範圍內500個值[1..250]
  • 你沒有保存或從random()方法返回任何
+1

最後一個是最重要的,但其他人也是如此。 – TheEmeritus 2013-05-12 14:12:09

0

我不認爲這是正確的做法。您需要另一個類,例如KeyWriter從GenKeys繼承。讓它隨機使用GenKeys方法(它不需要是靜態的) 也是,你的隨機方法是錯誤的,你只產生250個密鑰而不是500個,而且它們不是從0到250。
我的解決辦法是:
1)從GenKeys
2繼承KeyWriter)修改隨機僅返回1使用nextInt
3)使用週期內KeyWriter調用隨機的500倍,並將這些值寫入到一個文件中生成數字
4)使用KeyWriter類裏面的主要方法

我沒有發佈實際的解決方案,因爲它看起來像你在做你的功課。

2

嗯,有些東西在這裏是不正確的,但最奇怪的是,你使random()函數無效。

void random() 

X哪裏去?你只需創建一個新的int,但對此無能爲力。

除此之外,還有其他問題,正如其他人提到的一樣。 我建議你閱讀Java中的函數,特別是關於int和void之間的區別。

0

一些問題(和評論)我看到了蝙蝠的:

  1. x不是一個實例字段,而不是保存在某個地方因此如何能夠從子類訪問。

  2. 與其他人一樣,x正在被for循環的每次迭代覆蓋。

  3. 爲什麼mainProg.random()方法在mainProg.main()方法中聲明?

  4. 我不認爲繼承是一條路,除非這個項目絕對需要繼承。爲什麼不直接在mainProg類的main方法中創建一個隨機類的實例?

  5. 如果你想使用繼承我相信super.random()通話將是mainProg.random()方法的內部必要的。(請人證實了這一點。我不是100%確定)

如果是我,我會做沿着這一線的東西在我的GenKeys.random()方法:

public int[] random() { 
    int[] keys = new int[500]; 
    for(int i = 0; i < 500; ++i) 
    { 
     keys[i] = (int) (Math.random() * 100); 
    } 

    return keys; 
} 
  1. 此代碼創建並返回500個鍵的數組。不在1-250的範圍內。看到這裏:How do I generate random integers within a specific range in Java?

希望這會讓你開始正確的軌道。

0

xrandom()的局部變量。
所以你不能直接訪問課堂外的局部變量。
而你正試圖產生500個隨機數。在1-250之間改變for循環第一類

for (int i = 0; i < 500; i++){ 
..... 
}