我读了一本关于Java挑战的书,它提出了下一个问题:
创建一个函数,该函数获取一个数字作为参数,并检测number是7的倍数还是包含数字7。
签名是:public boolean find7(int num)
我创建此函数,当数字在0到99之间时,由下一个条件:
if (num mod 7 == 0 || num / 10 ==7 || num mod 10 == 7)
return true;
但是大于99的数字呢?像177,或709?我该如何检测它?
答案 0 :(得分:5)
最好不要将字符串排除在外:
public static boolean check(final int n) {
int m = Math.abs(n);
while (m > 0) {
if (m % 10 == 7)
return true;
m /= 10;
}
return n % 7 == 0;
}
while
- 循环检查每个数字并测试它是否为7;如果是,我们返回true,如果不是,我们继续。只有当数字都不是7时,我们才会到达最终的返回语句,此时我们将返回该数字是7的倍数。
答案 1 :(得分:2)
if (num % 7 ==0 || ("" + num).contains("7") ){
return true;
}
答案 2 :(得分:2)
您可以将方法扩展到100以上的数字,如下所示:
public boolean find7(int num) {
// support for negative integers
num = Math.abs(num);
// check if num is a multiple of 7
if (num % 7 == 0) {
return true;
}
// check to see if num contains 7
while (num > 1) {
// if the last digit is 7, return true
if (num % 10 == 7) {
return true;
}
// truncate the last digit
num /= 10
}
// the number is not a multiple of 7 and it does not contain 7
return false;
}
答案 3 :(得分:1)
您可以执行以下操作
if(Integer.toString(num).contains("7") || ...){
}
答案 4 :(得分:0)
至于检查数字是否可以被7整除,你没事。 如果你想检查它是否包含7位数,我认为最简单的方法是将数字视为字符串:
public boolean find7(int num) {
// check if it's a multiple of 7:
if (num % 7 == 0) {
return true;
}
// if it's not, check if it contains the character 7:
return String.valueOf(num).contains("7");
}
答案 5 :(得分:0)
用于检测数字是7的倍数:
boolean isMultiple = x % 7 == 0
用于检测数字:
将其转换为String
并使用String.contains()
或
像这样创建数字List
:
private List<Integer> getDigitList(int number){
List<Integer> list = new ArrayList<Integer>();
int leftover = number;
while (leftover != 0){
int result = leftover % 10;
leftover = (leftover - result)/10;
list.add(result)
}
assert leftover == 0;
return list;
}