2009-11-18 1 views
1

"스택에서"멀티 팝 "preform Java 메서드를 작성하려고합니다.자바 스택 메서드 (멀티탭) 초보자 자바

stack 개체 "k"번에 "팝"작업을 수행해야합니다. 이것은 내가 생각하고있는 것이지만, 옳지 않습니다. 밖에 도움이 필요 하신가요?

public void multipop(int k) { 
    while (top != null) { 
     for (int i = 0; i <= k; i++) { 
      this.pop(); 
     } 
    } 
} 
+0

감사합니다 모두! 1에 의해 떨어져서 그것을 돌 보았다! – Benzle

+0

'숙제'로 태그를 지정해야합니다. –

답변

3

오프 - 바이 원 오류와 같습니다.

k=1 인 경우 i=0i=1으로 루프를 진행합니다. i<=ki<k

+0

가장 간결한 우수 답변에 대한 제 투표를받습니다! 감사합니다 – Benzle

+0

그것은 코드에있는 유일한 오류가 아닙니다. – monksy

+0

나는 인정에 감사하지만, 나는 다른 대답들 중 일부는 내 대답에없는 중요한 문제들을 다루고 있음을 인정할 것이다. 예를 들어 while 루프는 스택이 비어있을 때까지 (즉, top == null까지) inner for 루프를 계속 실행합니다. 다른 사람들이 제안했듯이 if를 while으로 변경하고 for 루프 내부로 이동하면 (위치를 바꿔 쓰는)이를 수정할 수 있습니다. – Mercurybullet

3

몇 가지 문제는이와 있습니다

  1. 브래킷이해야 더 나은 포맷 [첫 불일치 믿고 나를 이끌 볼]에 있어야 널 케이스
  2. 수표를 for 루프의 중간 부분 : for (... ; i<=k && stack.canPop(); ...
  3. 팝업 할 수있는 항목이 있는지 확인하는 방법이 필요합니다.
  4. 다른 답변 상태에서 하나의 오류가 발생합니다. K 항목을 팝업하려면 condiction은 i < k 여야합니다.

첫 번째 루프가 null이 아닌 "최고"변수가 여전히 있다는 것을 확인합니다 때문에 예외 또는 무한 루프로 실행해야합니다, 다음은 0에서가는 두 번째 루프에 지시 :케이.

0

으로 변경하여 문제를 해결할 수 있습니다. 원하는 경우

for(int i =0; i < k; i++) 

더 많은 문제가있는 경우 더 많은 코드와 질문을 제공해야합니다.

6
  1. 스택이 고갈 될 때까지 while 루프를 실행합니다. 이는 아마도 원하는 것이 아닙니다. 스택에 요소가 있는지 확인하려면 if 문을 사용하십시오.
  2. 루프에서 0부터 k까지 반복합니다. 즉, k = 3이면 0, 1, 2 및 3을 통과하므로 this.pop()을 네 번 호출합니다. 당신이 ifwhile를 교체하더라도
  3. 하나 요소가 스택에이되어 있는지 확인,하지만 당신은 pop() 여러 번 호출 할 수 있습니다. 루프 내부에서 점검을 수행하거나 pop() 내부로 수표를 이동해야합니다.
  4. 압입 끔찍한 :)
0

첫째, 그것은 k는 0부터 (K + 1) 배, 루프. 둘째, 여러 팝 후에 최상위 값이 null 일 수 있습니다. 그래서 항상 탑 점검이 필요합니다.

는 그것은 다음과 같이 수정할 수 있습니다 :

공공 무효 multipop (INT의 K) {

for (int i = 0; top != null && i < k; i++) { 
     this.pop(); 
    } 

}