谁能解释我为什么我的代码不起作用,我在哪里出错?
我已经编写了这段代码,用于在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]);
}
}
}
答案 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;
}