【问题标题】:Is there a way to get the Math.min() for random integers? Java有没有办法获得随机整数的 Math.min() ?爪哇
【发布时间】:2019-12-02 00:10:46
【问题描述】:

我目前正在制作游戏,我正在尝试比较屏幕上显示的最短路径(这是一个随机生成的整数路径)和用户采用的路径。这部分代码是我尝试获取屏幕上总路径的Math.min() 的部分:

int path1 = randomNum3 + randomNum8;
int path2 = randomNum2 + randomNum7;
int path3 = randomNum + randomNum6;
int path4 = randomNum3 + randomNum5 + randomNum7;
int path5 = randomNum2 + randomNum5 + randomNum8;
int path6 = randomNum + randomNum4 + randomNum7;
int path7 = randomNum2 + randomNum4 + randomNum6;


int caminoMasCorto = Math.min(path1, path2, path3, path4, path5,
        path6, path7);

显示的错误是这个:

没有找到适合 min(int,int,int,int,int,int,int) 的方法

方法 Math.min(int,int) 不适用

(实际参数列表和形式参数列表的长度不同)

【问题讨论】:

    标签: java math random int


    【解决方案1】:

    要找到大量int 变量中的最小值,请使用:

    int caminoMasCorto = IntStream.of(path1, path2, path3, path4, path5,
            path6, path7).min().getAsInt();
    

    如果你没有使用 Java 8+,你可以这样做:

    int caminoMasCorto = path1;
    for (int value : new int[] { path2, path3, path4, path5, path6, path7 })
        caminoMasCorto = Math.min(caminoMasCorto, value);
    

    【讨论】:

      【解决方案2】:

      是的。正如错误所说,Math.min(int, int) 采用 两个 参数。改变

      int caminoMasCorto = Math.min(path1, path2, path3, path4, path5,
              path6, path7);
      

      int caminoMasCorto = Math.min(path1, Math.min(path2, 
              Math.min(path3, Math.min(path4, Math.min(path5, Math.min(path6, path7))))));
      

      (正如安德烈亚斯所说)

      int caminoMasCorto = Math.min(Math.min(Math.min(Math.min(Math.min(Math.min(
              path1, path2), path3), path4), path5), path6), path7);
      

      或者,您可以编写自己的 min 函数,该函数接受任意数量的 int(s) 并返回最小值。喜欢,

      private static int myMin(int... vals) {
          if (vals == null || vals.length < 1) {
              throw new RuntimeException("No values");
          }
          int t = vals[0];
          for (int i = 1; i < vals.length; i++) {
              t = Math.min(t, vals[i]);
          }
          return t;
      }
      

      然后使用

      int caminoMasCorto = myMin(path1, path2, path3, path4, path5,
              path6, path7);
      

      使用你认为最易读的那个。

      【讨论】:

      • 我觉得这样更好看:Math.min(Math.min(Math.min(Math.min(Math.min(Math.min(path1, path2), path3), path4), path5), path6), path7);
      • @Andreas Readability 在旁观者眼中。
      【解决方案3】:

      Java 的Math.min 接受两个参数。要将其扩展到多个数字,请尝试以下方法:

      public int minExtension (int... numbers) {
          int minimum = numbers[0];
      
          for (int number : numbers) {
              minimum = Math.min(number, minimum)
          }
      
          return minimum
      }
      

      这样称呼

      int caminoMasCorto = minExtension (path1, path2, path3, path4, path5, path6, path7);
      

      【讨论】:

        猜你喜欢
        • 2012-06-14
        • 2014-01-24
        • 2011-02-17
        • 2015-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-04
        相关资源
        最近更新 更多