Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使两个类在Java中协同工作?_Java - Fatal编程技术网

如何使两个类在Java中协同工作?

如何使两个类在Java中协同工作?,java,Java,我已经在这个项目中尝试了几个星期,我必须创建一个类,从1到250生成500个随机数,在第二个类中,我必须继承第一个类的属性,并将所有这些数字写入文本文件,但当我在获取属性和使用这些属性时遇到问题,我还没有找到一种方法在线 我的第一节课是 import java.util.Random; public class GenKeys { public static void random(){ for (int i = 0; i < 250; i++) { int x = (int) (M

我已经在这个项目中尝试了几个星期,我必须创建一个类,从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);
}
}
}
我怎样才能使这两个类一起工作

What am i doing Wrong ?
  • MainProg
  • 您一直在覆盖随机值,因为您只使用单个变量
    x
    ,而您应该使用例如数组
  • 在[0..99]范围内创建250个值,而不是在[1..250]范围内创建500个值
  • 您不会从
    random()
    方法中存储或返回任何内容
我还没有找到一种在网上做这件事的方法

我不确定你看得够仔细

如何让代码正常工作

首先,您希望将方法的类型和名称更改为
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();
for(int x=0;x<250;x++)
{
BufferedWriter out=新的BufferedWriter(新的FileWriter(“file.txt”);
write(randomNum()+System.getProperty(“line.separator”);
}
out.close();
代码中的各种问题

你在这里错误地使用了继承。您的类不是
GenKey
类型。它只是使用它,所以它应该是类中的一个字段


其次,一个方法只能返回一个值或一个对象。它不能按原样返回250个数字。您正在为
x
分配250个数字。这只存储生成的最后一个数字。

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


我没有公布实际的解决方案,因为看起来你在做功课。

好吧,这里有些东西不正确,但最奇怪的是你把random()函数变成了一个空函数

 void random()
X去哪里?您只需创建一个新的int,但不做任何处理

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

我看到的一些关于bat的问题(和注释):

  • x
    不是实例字段,也不存储在任何位置,因此如何从子类访问它

  • 正如其他人所说,for循环的每次迭代都会覆盖
    x

  • 为什么在
    mainProg.main()
    方法中声明了
    mainProg.random()
    方法

  • 我不认为继承是一条路,除非它是这个项目绝对需要的。为什么不在mainProg类的主方法中创建一个随机类的实例呢

  • 如果您想使用继承,我相信在
    mainProg.random()
    方法中需要调用
    super.random()
    。(请有人确认。我不是100%确定)

  • 如果是我,我会在我的GenKeys.random()方法中按照这句话做一些事情:

    public int[]random(){
    int[]键=新的int[500];
    对于(int i=0;i<500;++i)
    {
    键[i]=(int)(Math.random()*100);
    }
    返回键;
    }
    
  • 这段代码创建并返回一个包含500个键的数组。不在1-250范围内。请参见此处:

  • 希望这能让您开始正确的工作。

    x
    random()
    的局部变量
    因此,您不能直接在类外访问局部变量。
    您试图在1-250之间生成500个随机编号,所以在第一个类中更改for循环

    for (int i = 0; i < 500; i++){
    .....
    }
    
    for(int i=0;i<500;i++){
    .....
    }
    
    您扩展了GenKeys,但在写入值之前,您从未实际将
    x
    继承到某个值。因此,编译器错误…最后一个是最重要的,尽管其他的也是正确的。非常感谢,这起了作用,我只是不得不适应其他的意见,这些意见也回答了我,它现在工作得很好!
    public int[] random() {
       int[] keys = new int[500];
       for(int i = 0; i < 500; ++i)
       {
          keys[i] = (int) (Math.random() * 100);
       }
    
       return keys;
    }
    
    for (int i = 0; i < 500; i++){
    .....
    }