统计一个整数中出现最多的数字。如果数字个数一样则以最大的数字为准,例如1输出1,121输出1,23231输出3
答案:3 悬赏:70 手机版
解决时间 2021-01-19 17:40
- 提问者网友:锁深秋
- 2021-01-19 11:19
统计一个整数中出现最多的数字。如果数字个数一样则以最大的数字为准,例如1输出1,121输出1,23231输出3
最佳答案
- 五星知识达人网友:枭雄戏美人
- 2021-01-19 12:38
int[] b=new int[100];
这时候你会new出来100个零 。 输出岂不是都是零了。 还有,你用的int型存储的,所以不能超过int型最大值。 最好改成string型。 会舒服很多。 可以使用arraylist,不要用定长的数组。追问用Arraylist 怎么用?能简单的说下吗?这个现在没学过,我就一直想要动态数组但不知道追答我按你的思路写一个吧。 虽然这思路很low... 你可以自己想下怎么改良。槽点太多不知道怎么说了。。
public class W3_6 {
public static void main(String args[]){
Scanner a=new Scanner(System.in);
Integer x=a.nextInt();
String b = x.toString();
String c[] = b.split("");
int t = 0;
int[] num={0,0,0,0,0,0,0,0,0,0};
for(String d : c){
if(d.equals("")){
continue;
}
switch(Integer.parseInt(d)){
case 0:num[0]++;break;
case 1:num[1]++;break;
case 2:num[2]++;break;
case 3:num[3]++;break;
case 4:num[4]++;break;
case 5:num[5]++;break;
case 6:num[6]++;break;
case 7:num[7]++;break;
case 8:num[8]++;break;
case 9:num[9]++;break;
}
}
int max = 0;
for(int i=0;i if(max>=num[i]){
continue;
}else{
max = num[i];
t = i;
}
}
System.out.println(""+t);
a.close();
}
}追问我新学java,在上课,也就刚学一点,什么也不懂,老师没上过数组就让我们做习题来了。。。。。追答其实我写的也挺low的。。 随便写了完全没过脑子。 java数组和c还是有点区别的。 很简单,看一眼就知道了,给你个用string的版本。
public static void main(String args[]){
Scanner a=new Scanner(System.in);
String b = a.next();
char c[] = b.toCharArray();
int t = 0;
int[] num = new int[10];
for(char d : c){
num[d-48]++;
}
for(int i=0,max = 0;i if(max>=num[i]){
continue;
}else{
max = num[i];
t = i;
}
}
System.out.println(""+t);
a.close();
}追问这都已经有点看不懂了。你们java怎么学的,我们老师教的不行,希望能从其他途径学,不然这门课要废了,有推荐吗?还有,那个d-48是什么???冒号char 的:c是什么意思啊??我感觉你有个地方错了,最后的if语句中应该用>而不是>=追答就是自己学学 然后做点东西就ok了。 语言都是共同的。 因为我直接用的char型数据,得到的实际上是ascii码, 0对应的ascii码就是48 也就是说 char 0 实际上表示的是数值 48 所以需要减下去才是表示0, 另外 for( char d : c) 是jdk1.6提供的新的遍历方式, 意思就是取c的每一个元素,然后赋值给d来用。 等价于for( int i = 0,d=0; i<=c.lenght; i ++ ){ d = c[i] }。 另外 >= 和 > 实际上对结果的影响就是 “如果有相同次数的数值的时候,是取后一个还是前一个” 罢了。
实际上应该重新系统学习一下java基础,基础太重要了。你可以试着学习下java scjp,现在叫ocjp好像是。
你每一步debug跟踪下看看就知道是怎么回事儿了
这时候你会new出来100个零 。 输出岂不是都是零了。 还有,你用的int型存储的,所以不能超过int型最大值。 最好改成string型。 会舒服很多。 可以使用arraylist,不要用定长的数组。追问用Arraylist 怎么用?能简单的说下吗?这个现在没学过,我就一直想要动态数组但不知道追答我按你的思路写一个吧。 虽然这思路很low... 你可以自己想下怎么改良。槽点太多不知道怎么说了。。
public class W3_6 {
public static void main(String args[]){
Scanner a=new Scanner(System.in);
Integer x=a.nextInt();
String b = x.toString();
String c[] = b.split("");
int t = 0;
int[] num={0,0,0,0,0,0,0,0,0,0};
for(String d : c){
if(d.equals("")){
continue;
}
switch(Integer.parseInt(d)){
case 0:num[0]++;break;
case 1:num[1]++;break;
case 2:num[2]++;break;
case 3:num[3]++;break;
case 4:num[4]++;break;
case 5:num[5]++;break;
case 6:num[6]++;break;
case 7:num[7]++;break;
case 8:num[8]++;break;
case 9:num[9]++;break;
}
}
int max = 0;
for(int i=0;i
continue;
}else{
max = num[i];
t = i;
}
}
System.out.println(""+t);
a.close();
}
}追问我新学java,在上课,也就刚学一点,什么也不懂,老师没上过数组就让我们做习题来了。。。。。追答其实我写的也挺low的。。 随便写了完全没过脑子。 java数组和c还是有点区别的。 很简单,看一眼就知道了,给你个用string的版本。
public static void main(String args[]){
Scanner a=new Scanner(System.in);
String b = a.next();
char c[] = b.toCharArray();
int t = 0;
int[] num = new int[10];
for(char d : c){
num[d-48]++;
}
for(int i=0,max = 0;i
continue;
}else{
max = num[i];
t = i;
}
}
System.out.println(""+t);
a.close();
}追问这都已经有点看不懂了。你们java怎么学的,我们老师教的不行,希望能从其他途径学,不然这门课要废了,有推荐吗?还有,那个d-48是什么???冒号char 的:c是什么意思啊??我感觉你有个地方错了,最后的if语句中应该用>而不是>=追答就是自己学学 然后做点东西就ok了。 语言都是共同的。 因为我直接用的char型数据,得到的实际上是ascii码, 0对应的ascii码就是48 也就是说 char 0 实际上表示的是数值 48 所以需要减下去才是表示0, 另外 for( char d : c) 是jdk1.6提供的新的遍历方式, 意思就是取c的每一个元素,然后赋值给d来用。 等价于for( int i = 0,d=0; i<=c.lenght; i ++ ){ d = c[i] }。 另外 >= 和 > 实际上对结果的影响就是 “如果有相同次数的数值的时候,是取后一个还是前一个” 罢了。
实际上应该重新系统学习一下java基础,基础太重要了。你可以试着学习下java scjp,现在叫ocjp好像是。
你每一步debug跟踪下看看就知道是怎么回事儿了
全部回答
- 1楼网友:渊鱼
- 2021-01-19 14:28
for(i=0;i<9;i++)
{ if(num[i]<=num[i+1])
t=num[i+1];
else t=num[i];
}
System.out.println(""+t);
a.close();
这个部分有问题。
不是将 哪个值有多少赋给最后的输出,而是将 谁最多,也就是角标赋给 t
int y=0;
for(i=0;i<10;i++)
{ if(num[i]<=num[y]){
y=y;
}
else y=i;
}
System.out.println(""+y);
另外,你前面用int 接收 输入也不好,应该用string 要不然根本接收不到100位的数字……追问用String怎么做?到后来拆这个数字的时候怎么拆啊?不过前面那个是有错,要改。我用debug调试发现前面部分拆数字后的把b[i]每个都是0
{ if(num[i]<=num[i+1])
t=num[i+1];
else t=num[i];
}
System.out.println(""+t);
a.close();
这个部分有问题。
不是将 哪个值有多少赋给最后的输出,而是将 谁最多,也就是角标赋给 t
int y=0;
for(i=0;i<10;i++)
{ if(num[i]<=num[y]){
y=y;
}
else y=i;
}
System.out.println(""+y);
另外,你前面用int 接收 输入也不好,应该用string 要不然根本接收不到100位的数字……追问用String怎么做?到后来拆这个数字的时候怎么拆啊?不过前面那个是有错,要改。我用debug调试发现前面部分拆数字后的把b[i]每个都是0
- 2楼网友:时间的尘埃
- 2021-01-19 13:18
for(i=0;i {
num[b[i]]++; //简化计数
}
t=0;//最大次数
x=0;//数
for(i=0;i<=9;i++)//0-9
{ if(num[i]>=t)
{
t=num[i];
x=i;//当前数
}
}
System.out.println(""+x);
num[b[i]]++; //简化计数
}
t=0;//最大次数
x=0;//数
for(i=0;i<=9;i++)//0-9
{ if(num[i]>=t)
{
t=num[i];
x=i;//当前数
}
}
System.out.println(""+x);
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯