자바 세후 월급 프로그램 질문
에러는 없는데 ...
Exception in thread "main" java.lang.StackOverflowError
at SalaryManager.(SalaryManager.java:2)
at SalaryManager.(SalaryManager.java:6)
at SalaryManager.(SalaryManager.java:6)
at SalaryManager.(SalaryManager.java:6)
at SalaryManager.(SalaryManager.java:6)
at SalaryManager.(SalaryManager.java:6)
at SalaryManager.(SalaryManager.java:6)
at SalaryManager.(SalaryManager.java:6)
at SalaryManager.(SalaryManager.java:6)
이건 줄인거구요 at SalaryManager.(SalaryManager.java:6) 이게 엄청나게 많이 뜹니다.
이런게 뜹니다. 처음 겪는거라.. 넘쳐나서 공간부족 오류인듯 싶은데 어떻게 해줘야 하죠..
뭐가 문젠지....지금 머릿 속이 복잡해져셔 그런지 둔해졌어요..
public class SalaryManager {
double worktax,healthtax,nationaltax,totaltax; //근로소득세, 건강보험료, 국민연금, 총세금
int yearlySalary;//연봉
SalaryManager manager=new SalaryManager();
public double getMonthlySalary(int yearlySalary){
double monthlySalary; //월급 변수
monthlySalary=(yearlySalary/(double)12);//연봉 매개변수로 받으면 나누기 12 해서 월급게산
double worktax=manager.calculateTax(monthlySalary);
//근로소득세 받아오기
double nationaltax=manager.calculateNationalPension(monthlySalary);
//국민연금 받아오기
double healthtax=manager.calculateTaxHealth(monthlySalary);
//건강보험료 받아오기
totaltax=worktax+nationaltax+healthtax; //총 세금
monthlySalary-=totaltax; //월급에서 세금빼기
return monthlySalary; //세후 월급 리턴
}
public double calculateTax(double monthlySalary){ //근로소득세 계산 메소드
monthlySalary=manager.getMonthlySalary(yearlySalary);
double tax = monthlySalary*0.125; //근로소득세 계산결과
System.out.println("근로소득세"+tax);//결과 출력 이 부분은 출력메소드를 따로 만들어줘야 화면에 나타나겠죠?
return (double)tax;//근로소득세 리턴
}
public double calculateNationalPension(double monthlySalary){
monthlySalary=manager.getMonthlySalary(yearlySalary);
double tax = monthlySalary*0.081;//국민연금 게산결과
System.out.println("국민연금"+tax);//결과 출력 이 부분은 출력메소드를 따로 만들어줘야 화면에 나타나겠죠?
return (double)tax;//국민연금 리턴
}
public double calculateTaxHealth(double monthlySalary){
monthlySalary=manager.getMonthlySalary(yearlySalary);
double tax = monthlySalary*0.135; //건강보험료 계산결과
System.out.println("건강보험료"+tax); //결과 출력 이 부분은 출력메소드를 따로 만들어줘야 화면에 나타나겠죠?
return (double)tax; //건강보험료 리턴
}
public static void main(String[] args) {
// TODO Auto-generated method stub
double monthlyMoney; // 세후 월급변수
SalaryManager money=new SalaryManager();
monthlyMoney=money.getMonthlySalary(2000); //연봉 2000을 매개변수로 주고 세후 월급변수에 저장
System.out.println("세후 월급은 "+monthlyMoney); //세후 월급 출력
}
}
내용을 보지는 않았지만, 에러로그 관련
내용을 보지는 않았지만, 에러로그 관련 말씀드립니다.
탈출 조건이 없어서 재귀함수가 끝나지 않으면 그런 보고를 합니다.
탈출 조건을 살펴보세요.
코드는 code 태그 안에 적어주세요. 지금 보면
코드는 code 태그 안에 적어주세요.
지금 보면 멤버변수로
SalaryManager manager=new SalaryManager();
이런 게 있는데 이게 용도가 뭔지, 정말 필요한지 생각해보시는 게 좋겠네요.
main 에서 객체를 만들면 멤버를 초기화하면서
저 라인에서 새로운 SalaraManger객체를 만들고, 새로 만든 객체를 초기화하면서 또 새로운 SalaryManager 객체를 만들고, 이 객체를 초기화면서 또 새로운...의 반복입니다.
그리고 저걸 고치고 나도 이번에는
getMonthlySalary 메쏘드와 calculateTax 메쏘드가 계속 서로를 호출하면서 무한히 재귀호출하겠네요.
(여기까지만 확인했는데, 그 뒤로도 아마 비슷한 부분이 있을 듯)
좋은 하루 되세요!
댓글 달기