자바 세후 월급 프로그램 질문

yonoo88의 이미지

에러는 없는데 ...

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); //세후 월급 출력

}

}

neocoin의 이미지

내용을 보지는 않았지만, 에러로그 관련 말씀드립니다.
탈출 조건이 없어서 재귀함수가 끝나지 않으면 그런 보고를 합니다.
탈출 조건을 살펴보세요.

raymundo의 이미지

코드는 code 태그 안에 적어주세요.

지금 보면 멤버변수로
SalaryManager manager=new SalaryManager();
이런 게 있는데 이게 용도가 뭔지, 정말 필요한지 생각해보시는 게 좋겠네요.

main 에서 객체를 만들면 멤버를 초기화하면서
저 라인에서 새로운 SalaraManger객체를 만들고, 새로 만든 객체를 초기화하면서 또 새로운 SalaryManager 객체를 만들고, 이 객체를 초기화면서 또 새로운...의 반복입니다.

그리고 저걸 고치고 나도 이번에는
getMonthlySalary 메쏘드와 calculateTax 메쏘드가 계속 서로를 호출하면서 무한히 재귀호출하겠네요.
(여기까지만 확인했는데, 그 뒤로도 아마 비슷한 부분이 있을 듯)

좋은 하루 되세요!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.