这是一个相当简单的问题,但我是一个初学者,我已经被困在这个部分好几个小时了。我不是在寻找一个简单的方法,而是我只想了解我的代码发生了什么,以及为什么它不起作用。我的问题是:
创建一个包含随机数和当前时间的节点类。 创建存储类并将这些节点存储在列表/数组中。 使用主类创建50个节点并显示。
当我运行50次并获取我的列表时,我将列表打印出时间,以便我可以检查我的代码是否正在运行,并且它们都有相同的时间。这意味着不同的节点不会存储到我的列表中,而是在每次循环运行时被删除。那是为什么?
附上我的代码:
主:
public class NodeSort {
public static void main(String[] args)
{
int c = 0;
while (c < 50)
{
Storage.add();
c++;
}
}
}
节点:
public class Node
{
public static int num;
public static long time;
public Node()
{
num = Random.getNum();
time = System.nanoTime();
}
public static long getTime()
{
return time;
}
public static int getNum()
{
return num;
}
}
存储:
public class Storage
{
public static ArrayList<Node> list = new ArrayList<>();
public static void add()
{
list.add(new Node());
}
当我确实得到x = 1-50的时间时,它会同时打印出50次而不是50次不同的时间。
答案 0 :(得分:4)
它们都具有相同的time
值,因为它们几乎在同一时间创建。 System.nanoTime()
并不保证您实际上会获得纳秒精度,这取决于操作系统识别时间的能力。大多数操作系统只能提供毫秒级的分辨率。因此,如果所有调用都在相同的毫秒内发生,那么您将获得相同的值。
就随机数而言,我不知道 - Random
类是什么?这不是java.util.Random
。
编辑:哦等等,我明白了。您在num
课程中将time
和static
声明为Node
。这意味着每个只存在一个副本。只需从这些声明和返回值的方法中删除static
。