我正在编写一个程序,计算1到100之间的每个数字(0 - 9)出现的次数,最后它会说:
The digit 0 showed up ____ times between 1-100
The digit 1 showed up ____ times between 1-100
等等。
这是我的
public class CountEachDigit {
public static void main(String[] args) {
int counter =0;
int[] digit = new int[10];
for (int i=1;i<=100;i++) {
for (int j=0;j<=9;j++){
try{
String a = String.valueOf(i);
String b = String.valueOf(j);
if (b.equals(a.charAt(0)))
counter++;
digit[j]=counter;
} catch (Exception e){
continue;
}
try{
String a = String.valueOf(i);
String b = String.valueOf(j);
if (b.equals(a.charAt(1)))
counter++;
digit[j]=counter;
} catch (Exception e){
continue;
}
try{
String a = String.valueOf(i);
String b = String.valueOf(j);
if (b.equals(a.charAt(2)))
counter++;
digit[j]=counter;
} catch (Exception e){
continue;
}
}
}
for (int j =0;j<=9;j++){
System.out.println("The number "+j+" appears "+digit[j]+" times between 1 - 100.");
}
}
}
我试着将每个数字的charat改为一个字符串,以便使用try和catch来计算出现的次数。目前为止没有任何结果。
6条答案
按热度按时间z0qdvdin1#
您不需要字符串操作。您必须使用
x % 10
获取最后一位数字,然后使用x \= 10
删除最后一位数字。演示:
vmjh9lq92#
有一个int[10]的数组来计算每个数字的出现次数。
然后让一个函数遍历一个字符串,对于它找到的每个数字,增加数组中正确的字段。
然后循环从1到100的数字,将数字转换为字符串并将其输入函数。
最后打印数组值。
在代码中可能类似于
然后打印出来
n9vozmp43#
如果您或未来的读者想了解流方法(我对此表示怀疑),下面是我为了好玩而做的事情:在
[1 - 100]
范围内进行流传输,转换并Map为字符串,在每个字符处拆分每个字符串,例如"42"
变为"4" and "2"
流,使用数字作为关键字并使用出现次数作为值进行收集以Map,最后打印。6psbrbz94#
除了将一个数字转换为字符串,然后循环遍历它的数字之外,你还可以将余数除以10,也就是最后一位数字,然后将数字除以10,将它向右“移位”,例如
45 % 10 == 5
和45 / 10 == 4
。退出
while
循环后,number
是一位数,因此必须再次计算该数字。8fsztsew5#
使用字符串:
c2e8gylq6#
您可以使用通过流式传输和在Map中采集来执行此操作。
%
运算符获取最后一位数字印刷品