2012-11-12 5 views
0

이유를 설명 할 수 있습니까? do-while 루프를 사용하면 항상 무한 루프가 발생합니다. 내가 뭘 놓치고 있니? 조건이 항상, 따라서 무한 루프를 충족되도록Java의 무한 do..while 루프

package com.assignment2; 

public class FooCorporation { 

    public static void main(String[] args) { 

     employee(9.50, 55); 
     employee(8.20, 47); 
     employee(10.00, 73); 

    } 

    public static void employee(double basePay, int hoursWorked) { 

     double salary = 0; 
     int overtimeHours = 40; 

     do { 
      if (basePay >= 8.00 || hoursWorked > 40) { 
       if (hoursWorked > 40) { 
        salary = basePay * hoursWorked 
          * ((hoursWorked - overtimeHours) * 1.5); 
       } else { 
        salary = basePay * hoursWorked; 
       } 

      } 

      else 
       System.out.println("According to law: Base Pay should be more than $8.00"); 

      System.out.printf("Total Pay: %d %.2f\n", hoursWorked, salary); 

     } while (hoursWorked <= 60); 

    } 

} 
+7

housrWorked가 변경되지 않았습니다. – Martin

+3

왜 '무한하지 않아야합니까? – SLaks

+1

이 게시물은 숙제로 표시되어야합니다 ;-) –

답변

9

당신은 결코 hoursWorked의 값을 수정하지 있습니다. 당신은 내가 그 루프의 의미를받지 못했습니다, 그냥 여분 마일으로

else 
     System.out.println("According to law: Base Pay should be more than $8.00"); 

    System.out.printf("Total Pay: %d %.2f\n", hoursWorked, salary); 

    //Right here 
} while (hoursWorked <= 60); 

편집 후에는 각 반복의 끝에 값의 증가 할 수 있습니다. 언제 hoursWorked의 값을 올리시겠습니까? 특정 직원과 관련이 있어야하지 않습니까? 당신이 60 시간 이하 근무한 모든 고용주를 위해 그렇게하고 싶다면 그런 것처럼 보입니다. 이 경우 Employee 개체의 목록을 가져와 원하는 시간 동안 일한 eployees 만 선택하여 개체를 반복해야합니다.

+0

감사합니다. do-while을 없애고 if-else 문을 사용하면 훨씬 쉽습니다. – AppSensei

+1

@Appsiff 그래서 루프의 의미를 얻지 못했습니다. :) 오신 것을 환영합니다. – Gamb

1

hoursWorked 루프 상태가 결코 거짓이 아닙니다.

1

hoursWorked 값은 절대로 변경되지 않습니다. 항상 60보다 작거나 같습니다.

0

귀하의 while 상태가 결코 충족되지 않습니다. 루프에서 hoursWorked의 값을 수정하지 않으므로 근본적으로 실행됩니다. 그러나 값> 60을 전달하면 한 번만 실행됩니다.

0

코드를 디자인 한 방식에 따라 do-while loop 블록이 전혀 필요하지 않은 것처럼 보입니다. hoursworked 값을 전혀 변경하지 않았기 때문입니다.