2013-05-12 50 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++){ 
..... 
}