Java int 参数不为负
Java int argument not negative
我正在 Java 中编写一个方法,其中包含 3 个参数,最后一个(整数步骤)不能为 0 或负数。目前我是这样的:
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;
}
有没有更优雅的方法来拒绝方法中的非正整数并避免异常?
是的,有办法。您可以传递一个 class 的实例,而不是传递一个 int。在这种情况下,您可以创建一个名为 Step 的 class。您仍然必须检查步骤在 Steps 构造函数中具有的值的正确性。但是这样做之后你可以知道,如果你有一个 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
我正在 Java 中编写一个方法,其中包含 3 个参数,最后一个(整数步骤)不能为 0 或负数。目前我是这样的:
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;
}
有没有更优雅的方法来拒绝方法中的非正整数并避免异常?
是的,有办法。您可以传递一个 class 的实例,而不是传递一个 int。在这种情况下,您可以创建一个名为 Step 的 class。您仍然必须检查步骤在 Steps 构造函数中具有的值的正确性。但是这样做之后你可以知道,如果你有一个 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