마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

스택관련해서 질문드립니다.

0 추천
public class Scoring {
	public final static int MAX = 100;
	public final static int EMPTY = 0;
	static int stack[] = new int[MAX];
	static int top = 0;

	public static int _1p = 0;
	public static int _2p = 0;

	public static String p1Score = "0";
	public static String p2Score = "0";

	public static int p1Game = 0;
	public static int p2Game = 0;

	static int Win = 0;

	static boolean tieBreak = false; 


	static void ruleMain(int buttonClick)
	{
		//int inputBack;
		if(buttonClick==3){ 
			int popRet;
			popRet = Pop();

			if(popRet==1){
				_1p--;
				if(_1p<0){
					_1p = 0;
				}
				System.out.println("1p :"+_1p);
				WinSearch();
			}
			else if(popRet==2){
				_2p--;
				if(_2p<0){
					_2p = 0;
				}
				System.out.println("2p :"+_2p);
				WinSearch();
			}
		}

//////////////////////////////////////
/* Stack */
	static void Push(int data){
		int push;
		if(!isFull()){
			push = stack[++top] = data;
			System.out.println(push);
			//System.out.println(data);
		}
		else{
			System.out.println("Stack Error");
		}
	}

	static int Pop() {
		int ret = 1;
		if(!isEmpty())
			ret = stack[--top];
		System.out.println(ret);
		return ret;
	}

	static Boolean isEmpty() {
		if(top == EMPTY)
			return true;
		return false;
	}

	static Boolean isFull() {
		if(top == MAX-1)
			return true;
		return false;
	}

}

블루투스리모컨에 있는 버튼을 이용해서 점수를 올리고 실행취소 하는 기능을 넣으려고 하는데요.

1p의 점수를 2번 올리고 2p의 점수를 2번 올리면 로그캣에

1

0

1

0

2

0

2

0

이렇게 뜨고 이상태에서 실행취소 버튼을 한번 누르면 맨 마지막에 올라갔던 2p 점수는 그 전 점수로 내려가고

한번 더 누르면 로그캣에 0이라는 문구가 뜨면서 아무 반응이 없습니다. 그리고나서 한번 더 내리면 2p점수 내려가고 

이런식으로 두번 눌러야 실행취소가 되는데 한번만 눌러서 실행취소 시킬 수 없을까요?

CINOTALF (170 포인트) 님이 2013년 10월 28일 질문

1개의 답변

+1 추천
스택은 Stack 클래스 써서 사용하셔도 됩니다.

그리고 위에 구현하신 부분에서 push와 pop 동작에 문제가 있는데

++top, top++, --top, top-- 차이를 아셔야 할듯합니다.

만약 값을 한번만 넣고 뺀다고 하면

++top으로 넣으셨으니 값은 stack[1]에 들어가고

--top으로 빼기때문에 stack[0]에서 값을 가져오고 있네요.
whitesnow (8,920 포인트) 님이 2013년 10월 29일 답변
...