과제로 안드로이드 내부에 있는 계산기를 만들고 있습니다.
안드로이드 내부에 있는 계산기가 스택을 이용한 스택계산기이더군요..
배우지도 않은 자료구조 책을 봐 가면서 하고 있는데...
코드상에 오류는 없는데 안드로이드 에뮬레이터로 작동시키니까 실행시에 문제가 일어나네요...
계산기 작성 과정중에
public void Click_Num(double click)
{
if(before.equals("=")||before.equals("op"))
{
currentNumber=click;
ResultBar.setText("Click_Num when equal, op");
}
else if(before.equals("number"))
{
currentNumber=10*currentNumber + click;
ResultBar.setText("Click_Num when number");
}
else
ResultBar.setText("before checking Error");
ResultBar.setText(String.valueOf(click));
before="number";
operandStack.push(click);
}
위와 같은 함수를 생성 하였습니다. 숫자 버튼 클릭 시에 사용할 목적으로요.
if문 안의 setText는 잘 실행 되었나 테스트를 하기 위해서 삽입한 내용입니다.
위와 같은 함수를 다음과 같이 사용하였습니다.
//0번 클릭
Button_0.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Click_Num(0);
}
});
Button_0은 0번 버튼의 이름입니다.
컴파일러 상으로는 문제가 없는데, 에뮬레이터로 실행 시켰을 때 문제가 발생합니다.
실행까지는 문제가 없지만, 0번 버튼을 클릭하면
Unexpected error가 뜨면서 계산기 프로그램이 종료되어 버립니다.
혹시 함수 내부에서 문제가 되었나 해서 다음과 같이 함수를 바꿔서 실행 해 봤는데도 여전히 문제가 생기더군요..
public void Click_Num(double click)
{
/*
if(before.equals("=")||before.equals("op"))
{
currentNumber=click;
ResultBar.setText("Click_Num when equal, op");
}
else if(before.equals("number"))
{
currentNumber=10*currentNumber + click;
ResultBar.setText("Click_Num when number");
}
else
ResultBar.setText("before checking Error");
*/
ResultBar.setText(String.valueOf(click));
before="number";
operandStack.push(click);
}
이랬는데도 오류가 생겼다는 말은....
함수 자체에 진입하는데에 문제가 생겼다는 말 아닌가요??
함수의 정의 위치는
메인 클래스(맞는 말인가 모르겠군요...파일명과 같은 이름을 가지는 클래스를 지칭하였습니다.)에서 여러 변수를 정의해주는 부분 아래,
즉 변수 선언 이후와 OnCreate 함수 사이에 선언 해 주었습니다.
함수 선언 위치가 문제였다면 컴파일 상에서도 오류가 발견 될텐데...그러지도 않고...
왜 그런지 모르겠습니다..;;;
펍에 계신 고수님들께 여쭤봅니다...ㅎㅎ
이거때문에 며칠째 막혀서 최종과제를 진행 못시키고있네요ㅋ
혹시 도움이 될까봐 소스도 함께 첨부합니다.
operandStack을 선언하실 때 = new Stack<Double>(); 을 적어주시면 됩니다.
그리고 logCat 사용법 익히셔서 에러 메시지 참고하시면 도움이 될거에요
좋은 하루 되세요~