Java int 参数不为负

标签 java int negative-zero

我正在用 Java 编写一个带有 3 个参数的方法,最后一个参数(int 步骤)不能为 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;
}

有没有更优雅的方法来拒绝方法中的非正整数并避免异常?

最佳答案

是的,有办法。您可以传递类的实例,而不是传递 int。在这种情况下,您可以创建一个名为 Step 的类。您仍然需要检查 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 int 参数不为负,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47721257/

相关文章:

java - 在变量声明中使用括号

ios - 如何将负零与正零分开?

java - .prpt 文件(报告模板文件)是否包含数据源信息?

java - 如何在 Java 中反转数组?

Java 多线程 - 有没有办法同步/锁定映射中的特定值以进行读取和写入?

c++ - 如何在 C++ 中创建指向多维 int 数组的指针?

floating-point - 在 IEEE 754 中,为什么添加负零会导致空操作,而添加正零则不会?

c - 为什么 MSVS 不优化 +0?

java - 在Android上使用mockito加速编译

java - 为什么通过 stream() 调用比使用 if 子句更耗时?