Java 打印数字中特定数字出现的次数

Java 打印数字中特定数字出现的次数,java,if-statement,while-loop,Java,If Statement,While Loop,返回类型为void,并且有一个输入参数,我尝试使用while循环来打印输入整数中某个数字的数量 例如int i=32001;然后我想知道int中有多少个0,输出是2,因为int中只有两个0 由于某种原因,我下面的代码只输出0,我不知道为什么。有人能帮忙修理吗 请不要使用任何电动工具或某些方法为您完成工作,您可以使用for-loop或while-loop public class loopPrr { public void howMany0(int i){

返回类型为void,并且有一个输入参数,我尝试使用while循环来打印输入整数中某个数字的数量

例如int i=32001;然后我想知道int中有多少个0,输出是2,因为int中只有两个0

由于某种原因,我下面的代码只输出0,我不知道为什么。有人能帮忙修理吗

请不要使用任何电动工具或某些方法为您完成工作,您可以使用for-loop或while-loop

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" : ""));
    }
}

字符0永远不会等同于整数0如果要检查字符“0”是否在数字中,则需要将数字转换为字符串。字符串包含字符;ints不是。@sleepToken这不是真的,除非你指的是字符“0”。首先,你需要后退一步,思考一下基本的学校数学和十进制算术,以及如何使用它们从数字中获取一个数字,以及如何在没有该数字的情况下获取数字的其余部分。值得调试以观察发生了什么。是32001吗?我从没想过用它除以10得到下一组数字。感谢您分享您的想法和方法。我已经更新了答案,添加了一个目标参数,这样您就可以将该方法与其他数字一起使用,而不仅仅是零。此解决方案效率不高,因为它需要内存分配,再加上2个过程。您显然没有抓住要点。它需要一次通过才能获得计数。当然,你必须把它们打印出来。但关键是它能找到所有数字的计数。如果你的答案是打印所有不同数字的计数,那么你的答案是正确的,但问题是关于一个特定的数字,而不是每个数字的计数。我知道。我提出了一个更普遍的解决方案。您看到我的第一条语句了吗?这个解决方案需要额外的分配,因为它必须转换为字符串,然后用它创建一个数组。无效。@API_1024是的,但您可以重构该函数,并使用它来查找足够大的数字中的零或任何其他数字的个数,这些数字可以存储为整数,例如数百位数字,存储为字符串。另外,我还提供了一个替代解决方案,也许用例不需要我的解决方案。谢谢你的解释,我现在明白了。我想我可以用你的方法来解决一些特定的leetcode和hackerrank问题。谢谢分享。
1 1
3 2's
1 8
2 9's