2012-08-11 3 views
0

모의 고사 질문에 붙어 있습니다.Java에서 비 방어적인 방법은 무엇입니까?

아래 클래스를 작성했으며 작동합니다. 그러나 powN 메서드 본문 내에서 for(){} 루프를 사용해야합니다. 또한 powN의 비 방어적인 정의를 사용해야합니다.

내 질문 사항은 다음과 같습니다. for 루프는 어떻게 사용할 수 있습니까? 비 방어적인 방법은 무엇이며 어떻게 powN에서 사용할 수 있습니까?

public class Power { 
    private double x = 0; 

    Power(double x) { 
     this.x = x; 
    } 

    public double getX() { 
     return x; 
    } 

    public double powN(int n) { 
     return Math.pow(getX(), n); 
    } 

    public static void main(String[] args) { 
     Power p = new Power(5.0); 
     double d = p.powN(2); 
     System.out.println(d); 
    } 
} 
+0

은 방어적인 비트 일 뿐이며 가짜 값을 잡기 위해 예외를 사용합니까? – nsc010

+0

수비/비 방어 : http://www.doc.ic.ac.uk/~ar3/lectures/IndustrialMaster/SoftwareEngineering/L5/Lecture5.pdf (슬라이드 16) –

+0

감사합니다. – nsc010

답변

1

나는 당신의 재료에서 방어/비 방어 방법에 대한 슬라이드를 읽었습니다. 교수님이 매개 변수가 유효한지 확인하길 원합니다. 이와 같이 :

public double powN(int n) { 
    if (n < 0) { 
     throw new UnsupportedOperationException("Only positive values are supported"); 
    } 
    double tmp = 1; 
    for (int i = 0; i < n; i++) { 
     tmp = tmp * getX(); 
    } 
    return tmp; 
    } 
2

내 질문은 내가 자바 문법에 익숙하지 않은 나는 내가 루프

의를 어떻게 활용할 수 있는지,하지만 아이디어는 다음과 같습니다

public double powN(int n) { 

    double tmp=1; 
    for (int i=0;i<n;i++) { 
     tmp=tmp*getX(); 
    } 
    return tmp; 
} 

아무 생각이 무엇을 비 방어 수단

+0

은 컴파일되지 않습니다. tmp는 double이어야합니다. 덕분에 – evg

+0

. 편집 됨. getX()가 반환하는 것을 확인하지 않았습니다. – Gir

1

비 방위는 i와 같은 오류를 검사하기 위해 특별히 코딩하지 않았다는 것을 의미합니다. f n == 0, return 0.

대신에 n은 무엇이든 가져 와서 for 루프의 값을 사용하십시오.

그래서 내장 된 수학 함수 대신 For 루프가 작성한 함수와 동일한 작업을 수행합니다.

double result = 0.0 
for (int i = 0; i < n; i++) { 
    result = result * x; 
} 
+0

'결과 = 1;'초기화. then result = result * x;'루프 – Gir

+0

'result = x * x;'그래서 r은 단지 정사각형을 계산합니까? –

+0

나는 Gir에 동의한다. 나는 평소와 같이 수학을 잘못했다 ... – Logan

관련 문제