为什么我的以下代码逻辑不起作用?

时间:2018-07-25 20:47:41

标签: java

谁能解释我为什么我的代码不起作用,我在哪里出错?

我已经编写了这段代码,用于在Java中对整数中的0-9进行计数。如果可能的话,也请帮助我提供最佳解决方案。

我知道可以通过使用哈希表来有效地解决它,但是我正在寻找一个新手可以理解的解决方案。

import java.util.*;

class CountNo {

    public static void main(String args[] ) {
        Scanner a = new Scanner(System.in);
        String s = a.next();
        char[] b = s.toCharArray();
        int S_len = s.length();
        int[] count = {0,0,0,0,0,0,0,0,0,0};
        for(int i=0;i<S_len;i++)
        {  
           for(int j=0;j<=9;j++)
           {    
                if(b[i]==j)
                {      
                    count[j]+=1;
                    break;
                }
           }
        }
        for(int i=0;i<=9;i++)
        {
            System.out.println(i+" "+count[i]);
        }   
    }
}

3 个答案:

答案 0 :(得分:2)

因为char '0'!= 0,它的代码为48,所以您需要进行更改

if(b[i]==j)

进入

if(b[i]-'0'==j)

或者您可以简化逻辑,例如:

for(int i = 0; i < S_len; i++)
    count[b[i] - '0'] += 1;

答案 1 :(得分:0)

您可以使用地图,其中键是数字,值是计数。

您可以在此处了解有关映射的更多信息:https://docs.oracle.com/javase/8/docs/api/java/util/Map.html,但是本质上,映射是Java对象,它将“键”与“值”相关联,并且不允许重复。如果您试图跟踪“键”(在这种情况下为数字)出现在字符串或数组中的次数,这将很有用。

答案 2 :(得分:0)

            if(b[i]==j)
            {      
                count[j]+=1;
                break;
            }

您将char与int进行比较。尝试以下方法:

if(Character.getNumericValue(b[i]) == j){
count[j]+=1;
break;
}