-2

我已经在这个项目中尝试了几个星期,我必须创建一个从 1-250 生成 500 个随机数的类,在第二类中我必须继承第一类属性并将所有这些数字写入文本文件但是当我在获取属性和使用它时遇到问题,我还没有找到一种在线方法。

我的第一堂课是

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);
            }
        }

我怎样才能让这两个类一起工作?

4

6 回答 6

4
What am i doing Wrong ?
  • 您正在使用继承而不是仅使用GenKeysin的实例MainProg
  • 你不断覆盖你的随机值,因为你只使用一个变量x,当你应该使用例如一个数组时
  • 您在 [0..99] 范围内创建 250 个值,而不是在 [1..250] 范围内创建 500 个值
  • 您不会从您的random()方法中存储或返回任何东西
于 2013-05-12T14:04:03.940 回答
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 的范围内。请参阅此处:如何在 Java 中生成特定范围内的随机整数?

希望这将使您开始走上正确的道路。

于 2013-05-12T14:34:18.360 回答
0

x是 的局部变量random()
所以你不能直接访问类外的局部变量。
你正在尝试生成 500 个随机数。在 1-250 之间,所以在第一堂课中改变 for 循环

for (int i = 0; i < 500; i++){
.....
}
于 2013-05-12T15:19:36.497 回答
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. 这只会存储最后生成的数字。

于 2013-05-12T14:05:33.747 回答
0

我不认为这是正确的做法。您需要另一个类,例如从 GenKeys 继承的 KeyWriter。让它使用GenKeys方法随机(它不需要是静态的),你的随机方法是错误的,你只生成250个密钥而不是500个,它们不是从0到250。
我的解决方案是:
1)继承KeyWriter来自 GenKeys
2) 使用 nextInt 修改 random 以仅返回 1 个生成的数字
3) 在 KeyWriter 中使用循环调用 random 500 次并将这些值写入文件
4) 在 main 方法中使用 KeyWriter 类

我没有发布实际的解决方案,因为看起来你正在做作业。

于 2013-05-12T14:06:06.097 回答
0

好吧,这里有些地方不正确,但最奇怪的是您将 random() 函数设为 void。

 void random()

X去哪儿了?你只是创建一个新的 int,但什么也不做。

除此之外,还有其他问题,正如其他人提到的那样。我建议您阅读 Java 中的函数,尤其是关于 int 和 void 之间的区别。

于 2013-05-12T14:16:10.663 回答