【问题标题】:How to write a method that takes int variables and returns the largest?如何编写一个接受 int 变量并返回最大变量的方法?
【发布时间】:2012-11-20 01:32:59
【问题描述】:

我正在尝试编写一个方法来比较 3 个数字并返回其中最大的一个。

这是我的代码,但它不起作用...

public int max(int x, int y, int z){
    return Math.max(x,y,z);
} 

如何更正我的代码?

【问题讨论】:

    标签: java compare max


    【解决方案1】:

    试试这个...

    public int max(int x, int y, int z){
        return Math.max(x,Math.max(y,z));
    } 
    

    Math.max() 方法只接受 2 个参数,因此如果要比较 3 个数字,则需要执行此方法两次,如上代码。

    【讨论】:

      【解决方案2】:

      对于您当前的 3 个整数参数的解决方案,您可以替换:

      Math.max(x,y,z)
      

      Math.max(Math.max(x, y), z)
      

      javadoc 表明 Math.max 接受 2 个参数。

      【讨论】:

      • 对于 3 个实例的给定问题,这是最简单的方法。我也喜欢一般的解决方案,但对于这个特定的问题,我认为这是最好的答案。
      【解决方案3】:

      对于任意数量的 int 值,您可以这样做(提示 'o the hat to zapl):

      public int max(int firstValue, int... otherValues) {
          for (int value : otherValues) {
              if (firstValue < value ) {
                  firstValue = value;
              }
          }
          return firstValue;
      }
      

      【讨论】:

      • 除上述内容外,如果您使用的是不支持可变参数的旧 JVM 版本(Java 1.4 或更早版本),则方法签名应为 public int max(int[] values),并且您需要因此传入一个数组
      • @WATTOStudios - 是的,可变参数是在 Java 5 中引入的,所以它已经存在了很长时间。仍然有一些 Java 环境(例如 BlackBerry)是 Java 1.4。
      • 是的,只是想提一下,你永远无法知道用户实际在运行什么。不过喜欢你的回答。
      • 将方法签名更改为public int max(int value0, int... values) 将使IllegalArgumentException 超级流畅,并且可以直接使用value0 初始化maxValue。这么多更快/更小的代码:)
      • @zapl - 完成!将错误检查移到编译时要好得多。不错!
      【解决方案4】:

      如果 Apache Commons Lang 在您的类路径中,您可以使用 NumberUtils

      有几个maxmin 函数。也是你想要的。

      检查 API:http://commons.apache.org/lang/api/org/apache/commons/lang3/math/NumberUtils.html

      Commons Lang 很有用,因为它扩展了标准 Java API。

      【讨论】:

        【解决方案5】:

        尝试使用 JDK api:

        public static int max(int i, int... ints) {
            int nums = new int[ints.length + 1];
            nums[0] = i;
            System.arrayCopy(ints, 0, nums, 1, ints.length);
            Arrays.sort(nums);
            return ints[nums.length - 1);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-02-27
          • 1970-01-01
          • 1970-01-01
          • 2012-09-08
          • 1970-01-01
          • 2014-12-22
          • 2012-11-14
          • 1970-01-01
          相关资源
          最近更新 更多