2013-10-27 5 views
0

나는 문제에 직면했다. 코드 : 주요 기능은 다음과 같습니다대기열에 어떤 문제가 있습니까?

// withdraw method 
public void withdraw(long n) 
{ 
    this.n = n; 
    Action a = new WithDraw(); 
    a.doAction(n); 
    **if(actionsList.size() > 10)** 
    { 
     actionsList.poll(); 
     actionsList.offer(a); 

    } else 
    { 
     actionsList.offer(a); 
    } 

} 

// Deposit method goes here 

    public void deposit(long n) 
{ 
    this.n = n; 
    Action a = new Deposit(); 
    a.doAction(n); 
    **if(actionsList.size()<10)** 
    { 

     actionsList.offer(a); 
    } else 
    { 
     actionsList.poll(); 
     actionsList.offer(a); 
    } 

} 

:

acc1.deposit(1); 
    acc1.withdraw(2); 
    acc1.deposit(3); 
    acc1.withdraw(4); 
    acc1.deposit(5); 
    acc1.withdraw(6); 
    acc1.deposit(7); 
    acc1.withdraw(8); 
    acc1.deposit(9); 
    acc1.withdraw(10); 
    acc1.deposit(11); 
    acc1.withdraw(12); 
    acc1.deposit(13); 
    acc1.withdraw(14); 
    acc1.deposit(15); 
    acc1.displayActions(); 

내가 10 필요는 마지막 요소를 추가했다. 그 후에 나는 10이 아닌 11 가지 요소를 인쇄했습니다. 그게 뭐가 잘못 되었습니까? 큐 크기()를 올바르게 이해하지 못했을 수 있습니까?

ADDED 인쇄 방법 :

public void displayActions() 
    { 
     for(Action s : actionsList) 
     { 
      System.out.println(s); 
     } 
    } 
+0

'displayActions' 메소드를 게시하십시오. –

+0

이것은 내가 알고있는 것입니다 (정확합니까?) : 두 가지 종류의 행동이 있습니다 : 철회와 예금. 이 조치는 은행 계좌로 /에서 돈을 어딘가에서 인출하거나 입금합니다. 이러한 모든 조치는 대기열에 들어가며 마지막 10 개는 인출 또는 예금과 상관없이 거기에 있어야합니다. 내가 처음 이해하지 못하는 것은 비대칭 코드입니다. 큐 단위로 동일한 코드를 사용해야합니다. 그렇지 않으면 오해 할 수 있습니까? 설명해 주시겠습니까? – jboi

+0

먼저, 올바르게 이해합니다. 둘째, 대칭인지 아닌지는 중요하지 않습니다. 왜냐하면 대칭으로 만들었지 만 그 결과는 같습니다. – Ernusc

답변

2

크기가 10 같을 때 당신이 11

를 얻을 수 있도록 다른 사람이 >의 반대를 언급 한 바와 같이, 당신은 여전히 ​​<=>=<이며, 다른를 추가 할 수 있으며, ==은 간단히 말해 코드를 최대한 일관성있게 유지해야합니다. 코드가 똑같은 일을하기로되어 있다면, 두 가지 방법 모두를 사용하지 않는다면 똑같은 방식으로 작성해야합니다.

public void withdraw(long n) { 
    queueAction(new Withdrawal(n)); 
} 

public void deposit(long n) { 
    queueAction(new Deposit(n)); 
} 

void queueAction(Action action) { 
    action.doAction(); 
    if (actionsList.size() >= 10) 
     actionsList.poll(); 
    actionsList.offer(aaction); 
} 

... 난 아무것도 표시되지 않습니다이 같은 this.n = n;을 촬영하고 난 당신이 그것을 대기 전에 작업을 수행하는 지점이 표시되지 않는 모르겠습니다 이유를 지난 10 년보다 오래된 예금은 아무 것도 말없이 버리고 싶어합니다.하지만 제가 인출 한 것을 일부 무시할 수 있기를 바랍니다.

+0

좋은 해결책입니다. 감사합니다. – Ernusc

1

이는 0에서 시작하는 크기는()의 간단한 경우가 있습니까?

IE, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 = 11

+0

나는 그렇게 생각하지 않는다. 그러나 나는 또한 정말로 확신 할 수 없다. 정확하게 달성되어야 할 것이 무엇인지. 'size() <10 '을 요청하면 대기열에 최대 10 개의 요소가 있습니다. 요소는 0-9의 색인이 붙지 만, 색인을 요구하는 코드는 보지 못했습니다. – jboi

0

withdraw 당신은 size() > 10 테스트 및 depositsize()<10 대 - 그러나 < (10)의 대향 하지> 10 만> = 10