【问题标题】:Java Method: Integer contains 1Java 方法:整数包含 1
【发布时间】:2017-12-24 06:33:22
【问题描述】:

我正在尝试创建一个方法,如果输入的整数中有一个,则返回 true,否则返回 false。当输入的数字没有 1 或以 1 结尾时,该方法可以正常工作。但是如果这个不是 int 中的最后一位,它会错误地返回 false。有什么想法有什么问题吗?这是我的脚本:

public static boolean hasOne(int n) {
    boolean retval = false;

    if (n % 10 == 1) {
        retval = true;
    } else {
        dropLastDig(n);
    }
    return retval;
}

public static void dropLastDig(int input) {
    int newNum = input/10;

    if (newNum > 0) {
        hasOne(newNum);
    }
}

1000 应该返回 true

211 应该返回 true

1 应该返回 true

3 应该返回 false

234 应该返回 false

【问题讨论】:

  • has a one 是什么意思? 1000 算不算?
  • 没错
  • 提示:如果你执行hasOne的else部分,返回值总是false
  • 为什么会这样?
  • 因为你到达return retval,而retval的值仍然是false。请注意,hasOne 的递归调用将具有 retval 的独立实例。

标签: java


【解决方案1】:

你可以使用递归函数,它更快:

public static boolean hasOne(int n) {
  if(n<0) return hasOne(-n); // check for negatives
  if(n==0) return false; // exit condition

  if (n % 10 == 1) {
    return true;
  } 
  return hasOne(n/10);
}

或者将其转换为String,然后检查:

String.valueOf(n).contains("1");

【讨论】:

  • 我认为它应该检查是否有负面影响
  • 没错,添加了一个修复程序。
【解决方案2】:

只需改用String.valueOf

return String.valueOf(x).contains("1");

【讨论】:

    【解决方案3】:

    试试String.valueOf(n).contains("1")

    【讨论】:

      猜你喜欢
      • 2014-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多