2013-04-01 4 views
0

안녕하세요 저는 Java를 사용하여 대기 대기열을 시뮬레이션하려고했습니다. 대기열 시뮬레이션

  • 10 개 고객의 최소 임의 간격으로 큐에이 도착합니다 출납원의

    • 사용자 입력 n 번째 번호 : 무엇 내 프로그램을 구성해야합니다.
    • 점원이 무료 인 경우 다음 고객은 회선이 처리됩니다.
    • 프로그램은 큐의 각 단계와 각 고객이 큐에 소비 한 시간을 출력해야합니다.

    오키 (Oki) 그래서 내가 갖고있는 것은 빈 큐 객체, 즉 문자열을 대기열로 보내는 임의의 문자열 목록 생성기입니다.

    그러나 임의의 문자열 생성기가 루프에서 중복을 선택하는 경우 어떤 문제가 발생합니까?이를 어떻게 수정합니까? 또한 0.5 초 간격으로 고객을 대기열로 보내려면 어떻게해야합니까? 대기열에 들어가는 시간을 기록하고 대기열을 나가야하므로 대기열에서 보낸 시간을 출력 할 수 있습니다. 나는 지금 무엇을 해야할지 모르겠다.

    public static Queue<String> line = new LinkedList<String>(); 
    
    public static void main(String[] args) 
    { 
        String[] list = {"a", "b", "c", "e", "f", "g", "h", "i", "j", "k", }; 
        int customer = list.length; 
    
        for (int x = 0; x < customer; x++) 
        { 
         int cus = (int) (Math.random() * customer); 
         line.add(list[cus]); 
        } 
    } 
    
  • +0

    물론 그것은 무작위입니다. –

    답변

    -1

    랜덤 함수는 실행 된 시간을 기준으로 숫자를 생성합니다. for 루프는 꽤 빠르기 때문에 random 함수는 같은 수를 생성합니다. 루프의 코드로 새 함수를 만들고 루프에서 호출 해보십시오.

    +0

    이것은 사실이 아닙니다. 동일한 시드의 두 난수 생성기가 동일한 시퀀스를 생성합니다. 랜덤 제네레이터는 동일한 수를 생성 할 수 있습니다 - 이는 결국 균일 한 분포를 샘플링하는 것입니다. –

    0

    당신은 System.currentTimeMillis()Thread.sleep()에 익숙해합니다. 작업 (소비/생산)을 한 다음 500 밀리 초 동안 휴면하고 다시 루프를 반복하는 루프에 대해 생각해야합니다.

    0

    오키는 지금까지 고객 이름과 그들이 다른 클래스의 메소드를 사용하여 제공된 시간을 출력하는 루프 작업을 관리했습니다. 그러나 사용자가 기본적으로 전체 루프가 x (n 번째 계산원이 입력 됨)를 실행할 것을 의미하는 계산원을 n 번째 입력 한 경우에도 여전히 계속됩니다.

    Random ran = new Random(); 
        while (!line.isEmpty()) 
        { 
         System.out.println(line + "\n"); 
         System.out.println("The queue has " + line.size() + " customers left"); 
         Customer cus = line.remove(); 
         System.out.println(cus.name + " queued at " + cus.getTime() + " <=== SERVED" + "\n"); 
         // you will have to sleep a random number of seconds here 
         int wait = ran.nextInt(2) + 1; // will generate 1 or 2 
         try 
         { 
          Thread.sleep(wait * 1000); 
         } 
         catch(Exception e) 
         { 
          System.out.println("Sleep error: " + e); 
         } 
        } 
    
    관련 문제