2014-01-21 3 views
0

이것은 매우 간단한 질문이지만 초보자이며 몇 시간 동안이 부분을 고수했습니다. 쉬운 방법을 찾고있는 것이 아니라 대신 내 코드에서 어떤 일이 일어나고 있는지, 왜 작동하지 않는지 이해하고 싶습니다. 내 문제는 :사용자 정의 객체의 Arraylist

임의의 숫자와 현재 시간으로 노드 클래스를 만듭니다. 저장소 클래스를 만들고 해당 노드를 목록/배열에 저장합니다. 메인 클래스를 사용하여 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

인쇄 코드를 표시하십시오. –

+0

매우 빠른 속도로 실행되기 때문에 동일한 난수가 생성 될 수 있습니다. –

+0

출력을 자세히 설명해 주시겠습니까? 나는 그것에 확실하지 않다. 출력물을 정확히 어디에 인쇄하고 있습니까? 또한'nanoTime()'을 왜 사용하고 있습니까? –

답변

4

모두 거의 동일한 시간에 생성되기 때문에 모두 time 값입니다. System.nanoTime()은 실제로 나노초 정밀도를 보장하지 않습니다. 이는 운영 체제의 시간 식별 능력에 달려 있습니다. 대부분의 OS는 밀리 초 해상도 만 제공 할 수 있습니다. 따라서 모든 호출이 동일한 밀리 초 내에 발생하면 동일한 값을 얻게됩니다.

난수와 관련된 한, 알지 못합니다 - Random 클래스는 무엇입니까? 그것은 java.util.Random이 아닙니다.

편집 : 오, 봐요. Node 클래스에 numtimestatic으로 신고하셨습니다. 즉, 존재하는 각각의 사본이 하나만 있음을 의미합니다. 해당 선언과 값을 반환하는 메서드에서 static을 제거하기 만하면됩니다.

+0

첫 번째 요점은 올바르지 않습니다. 왜냐하면 루프가 실행되는 동안 인쇄 할 것이기 때문에, 나는 50 개의 다른 숫자를 얻는다. 목록에서 모두 동일하다는 것을 알 때만 액세스 할 수 있습니다. 두 번째 이유가 그 이유 일 수 있습니다. 무작위에 관해서는, 내가 만든 클래스지만, 코드를 포함하지 않았습니다. 정적이 probem인지 확인하려고합니다. 감사! – MehtabC

+0

안녕하세요, 두 번째 팁으로 고정했습니다. 답변 해 주셔서 감사합니다. 정적 인 것과 왜 다른가/왜 nonstatic 클래스에서 호출 할 수 없는지 혼란 스럽습니다. 더 자세한 정보를 얻으려는 지시 사항이 있습니까? – MehtabC

+0

@MehtabC -'static'은 필드 나 메소드를 각 개별 인스턴스가 아닌 클래스 전체에 속한 것으로 표시합니다. 쿠키 커터와 같은 클래스 선언을 생각해 볼 때마다, 그리고 새로운 커스텀을 스탬프 처리하기 위해 쿠키 커터를 사용하는'new MyClass()'를 호출 할 때마다.'static '은 필드/메소드가 개별 쿠키가 아닌 쿠키 커터에 속함을 의미합니다. 일반적으로 상수 및 특정 인스턴스에 의존하지 않는 유틸리티/도우미 함수에 사용됩니다. – MattPutnam

관련 문제