[英]Arraylist of Custom Object
這是一個非常簡單的問題,但是我是一個初學者,而且我已經在這部分上停留了幾個小時。 我不是在尋找簡單的出路,而是想了解我的代碼正在發生什么以及為什么它不起作用。 我的問題是:
創建一個具有隨機數和當前時間的節點類。 創建一個存儲類並將這些節點存儲在列表/數組中。 使用主類創建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次。
它們都具有相同的time
值,因為它們幾乎都是在同一時間創建的。 System.nanoTime()
不能保證您會真正獲得納秒級的精度,這取決於操作系統識別時間的能力。 大多數操作系統只能提供毫秒級的分辨率。 因此,如果所有調用都在同一毫秒內發生,則您將獲得相同的值。
至於隨機數,我不知道-什么是Random
類? 不是java.util.Random
。
編輯:哦,等等,我明白了。 您在Node
類中將num
和time
聲明為static
。 這意味着每個副本只有一個副本。 只需從這些聲明以及返回值的方法中刪除static
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.