2017-12-08 6 views
1

Java에서 3 개의 argumens가있는 메소드를 쓰고 있습니다. 마지막 단계 (int step)는 0 또는 음수가 될 수 없습니다. 그 순간 나는 이것을 좋아한다 :Java int 인수가 음수가 아닙니다.

public static int[] createMonotoneIncreasingArray(int start, int end, int step) { 
    if (step <= 0) throw new IllegalArgumentException("Step cannot be lower than 1 in a monotone increasing array"); 

    int[] resultArray = new int[(end - start)/step]; 

    for (int i = 0; i < resultArray.length; i++) resultArray[i] = i * step + start; 

    return resultArray; 
} 

더 좋은 방법은 부정적인 int를 거부하고 예외를 피할 수 있습니까?

+3

아니요. Java는 부호없는 정수 유형을 가지고 있지 않습니다. 그래도 그랬더라도 여전히 0을 거부해야합니다. –

+1

예외를 던지면서 잘못된 점은 무엇입니까? 그것은 완벽하게 유효합니다. – OldProgrammer

+2

... 예외를 피하십시오? "거부"란 무엇을 의미합니까? 코딩 한 내용은 step> 0을 확인하는 가장 좋은 방법입니다. –

답변

0

예, 방법이 있습니다. int를 전달하는 대신 클래스의 인스턴스를 전달할 수 있습니다. 이 경우 Step이라는 클래스를 만들 수 있습니다. 단계 생성자에서 단계에있는 값의 정확성을 검사해야합니다. 하지만 그렇게 한 후에 Step의 인스턴스가 있으면 값이 0보다 큰 것을 알 수 있습니다.

public class Step { 

    private int value; 

    public Step(int value) { 
     if (value <= 0) throw new IllegalArgumentException("Step cannot be lower than 1"); 
     this.value = value; 
    } 

    public int getValue() { return value; } 
} 


public static int[] createMonotoneIncreasingArray(int start, int end, Step step) { 
    int[] resultArray = new int[(end - start)/step.getValue()]; 
    for (int i = 0; i < resultArray.length; i++) resultArray[i] = i * step.getValue() + start; 
    return resultArray; 
} 

이것은 int 값을 제한하는 데 매우 일반적으로 사용되는 패턴입니다. 이 패턴의 또 다른 예는이 질문을 참조하십시오. Setting a limit to an int value

+1

고마워요! PositiveInteger 클래스를 사용하여 필요할 때 항상 재사용 할 수 있습니다. – Belen