问题描述
返回类型为void,只有一个输入参数,我试图使用while循环来打印出输入整数中多少个特定数字。
例如int i = 32001;那么我也想知道int中有多少个0,而输出将是2,因为该int中只有两个0。
以下我的代码出于某种原因仅输出0,但我不知道为什么。有人可以解决或帮助吗?
请不要使用任何适合您的电动工具或某些方法,而可以使用for循环或while循环。
public class loopPrr
{
public void howMany0(int i){
int n = 0;
int howmany = 0;
char z = '0';
while(i <= 0){
++i;
if(i == z){
howmany++;
}
}
System.out.println(howmany);
}
public static void main(String args[]){
loopPrr n = new loopPrr();
n.howMany0(32001);
}
}
解决方法
尝试下一个代码。逻辑很简单,执行mod 10以获得最右边的数字,将其计数为目标,将其除以10以除去最后一位,然后重复。
public void countNumber(int n,final int target) {
int count = 0;
if (n == target) {
count = 1;
}
else {
while (n != 0) {
if (n % 10 == target)
count++;
n /= 10;
}
}
System.out.println(count);
}
,
或者,您可以将数字分成一个字符数组,并查看有多少个零:
public void howMany0(int i) {
if (i == 0) return 1;
String str = String.valueOf(i);
char[] digits = str.toCharArray();
int howmany = 0;
char z = '0';
for (char c : digits) {
if (c == z) {
howmany++;
}
}
return howmany;
}
,
获得所有数字的频率计数的一种简单方法如下:
int[] freq = new int[10];
int numb = 2829921;
while (numb > 0) {
// use the digit as the index and bump the count
freq[numb % 10]++;
numb /= 10;
}
for (int i = 0; i < 10; i++) {
// skip empty slots
if (freq[i] > 0) {
int k = freq[i];
System.out
.println(k + " " + i + ((k > 1) ? "'s" : ""));
}
}
打印
1 1
3 2's
1 8
2 9's