【问题标题】:Java: make a function return positive integer not negative one [closed]Java:使函数返回正整数而不是负整数[关闭]
【发布时间】:2014-10-27 14:10:40
【问题描述】:

当我为了好玩而编写这个项目时,我被困在获得我想要的输出上:从输入中取出积极的元素,2 和 -2。

更简单地说,我希望输出是正2而不是负2。

一般的想法是让最接近零的元素。但在这里,我假设正值更接近于 0。

希望大家能回答我的问题。就我个人而言,我想在 Java 方面做得更好,这样我现在就可以帮助像我这样的新手,以后也可以。无论如何,谢谢你,提前。

  static int getClosestToZero(int[] array) {
    int num = array[0];
    int absNum = Math.abs(num);
    for(int i = 1; i < array.length; ++i) {
        int newAbs = Math.abs(array[i]);
        if(newAbs < absNum) {
            absNum = newAbs;
            num = array[i];

            }
        }

    return num;
}
public static void main(String[] args) {

            int[] myArray = {-2, 2};

            System.out.println(getClosestToZero(myArray));
        }

【问题讨论】:

  • if 中的最后一行不应该是num = newAbs;吗?
  • 应该 >=,而不是 <.....>
  • @MarounMaroun 非常感谢你们!
  • {2, -1}的情况下要返回什么?
  • @DreamInCode 这些 cmets 并不完全正确。您不希望 num = newAbs,{-3,-2} 将返回 2。将 &lt; 更改为 &gt;= 将使您从 0 开始寻找更远的数字...

标签: java arrays math integer


【解决方案1】:

这应该可行:

static int getClosestToZero(int[] array)
{
    int num = array[0];
    int absNum = Math.abs(num);
    for (int i = 1; i < array.length; ++i)
    {
        int newAbs = Math.abs(array[i]);
        if (newAbs < absNum)
        {
            absNum = newAbs;
            num = array[i];

        }else if(newAbs == absNum && array[i]>=0)//if equals and the current is positive, then take it
        {
                num = array[i];
        }
    }

    return num;
}

【讨论】:

    【解决方案2】:

    当您检查该值是否比当前最接近的值更接近零时,只需使用 Math.abs() 获取绝对值并检查它是否与当前最接近的值匹配。如果它们匹配,则忽略它并继续迭代。

    【讨论】:

    • 这正是 OP 当前代码所做的。
    【解决方案3】:

    只需修改条件:

    if (newAbs < absNum || (newAbs == absNum && array[i] > num)) {
    

    如果有的话,它会将负值替换为相同的正值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-21
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 2013-04-22
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多