我正在为CS151类编写一个名为countSevens(n)的方法。它返回计数给定数字n中有7位数字。到目前为止,这就是我所要做的,但是我做错了一些我不知道的错误。
public int countSevens(int n){
int count = 0;
String strI = Integer.toString(n);
for (int i = 0; i < strI.length(); i++){
if(strI.substring(i).equals("7")){
count++;
}
}
return count;
}
答案 0 :(得分:2)
您可以使用Java流
public int countSevens(int n) {
return (int) String.valueOf(n).chars().filter(ch -> ch == '7').count();
}
答案 1 :(得分:1)
strI.substring(i)
将部分字符串从i字符返回到结尾。
改为使用strI.charAt(i)
答案 2 :(得分:1)
根据String.substring(int)
的定义:
返回一个字符串,该字符串是该字符串的子字符串。子字符串以指定索引处的字符开头,并延伸到该字符串的末尾。
因此,这只会计算您数字中7的最后一个实例,并且仅是数字中的最后一位。
相反,请尝试以下操作:
if(strI.substring(i, i+1).equals("7"))
或者,由于您要处理整数,因此可以避免完全使用字符串。 n % 10
将为您提供最后一位数字,而n /= 10
将使整个数字右一位。这应该足以让您开始在不使用字符串的情况下进行此操作。
答案 3 :(得分:1)
要计算整数中的7s:
int counter = 0;
int number = 237123;
String str_number = String.valueOf(number);
for(char c : str_number.toCharArray()){
if(c == '7'){
counter++;
}
}
答案 4 :(得分:0)
您可以使用简单的算法:
public static int countSevens(int i) {
int count = 0;
for (i = i < 0 ? -i : i; i != 0; count += i % 10 == 7 ? 1 : 0, i /= 10);
return count;
}
但是谁能读懂这个?数量不多,因此这里是采用相同逻辑的更清洁的解决方案:
public static int countSevens(int i) {
int count = 0;
// ignore negative numbers
i = Math.abs(i);
while(i != 0) {
// if last digit is a 7
if(i % 10 == 7) {
// then increase the counter
count++;
}
// remove the last digit
i /= 10;
}
return count;
}