小弟请教,积分不多,留着没用!!!

sunyjay 2006-12-19 12:44:36
输入一个十六位数,统计0-9出现的次数?
import javax.swing.JOptionPane;
public class Num {
public static void main(String args[]){
String str;
long n;
int[] a=new int[10];
int i,j,m=0;

str=JOptionPane.showInputDialog("请输入一个十六位数");
n=Long.parseLong(str);
for (i=15;i>=0;i--)
{

m=(int)(n/Math.pow(10,i));
n=(long)(n-m*Math.pow(10,i));
}
switch(m){
case 0: a[0]++;break;
case 1: a[1]++;break;
case 2: a[2]++;break;
case 3: a[3]++;break;
case 4: a[4]++;break;
case 5: a[5]++;break;
case 6: a[6]++;break;
case 7: a[7]++;break;
case 8: a[8]++;break;
case 9: a[9]++;break;
}
for(j=0;j<=9;j++)
System.out.println(a[j]);
}

}
错误提示:The local variable m may not have been initialized
...全文
120 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
malligator 2006-12-19
  • 打赏
  • 举报
回复
import javax.swing.JOptionPane;
public class Num {
public static void main(String args[]){
String str;
long n;
int[] a=new int[10];
int i,j,m=0;

str=JOptionPane.showInputDialog("请输入一个十六位数");
n=Long.parseLong(str);
for (i=15;i>=0;i--)
{

m=(int)(n/Math.pow(10,i));
n=(long)(n-m*Math.pow(10,i));

switch(m){
case 0: a[0]++;break;
case 1: a[1]++;break;
case 2: a[2]++;break;
case 3: a[3]++;break;
case 4: a[4]++;break;
case 5: a[5]++;break;
case 6: a[6]++;break;
case 7: a[7]++;break;
case 8: a[8]++;break;
case 9: a[9]++;break;
}
}
for(j=0;j<=9;j++)
System.out.println(a[j]);
}

}
sunyjay 2006-12-19
  • 打赏
  • 举报
回复
晕,运行错了,不好意思mal大哥!!!
sunyjay 2006-12-19
  • 打赏
  • 举报
回复
好像mal大哥第二个的运行不对,为什么m还必须付初值呢?
sunyjay 2006-12-19
  • 打赏
  • 举报
回复
不好意思,我是新用户积分少,谢谢大家了,我刚学习java,还请大家多多指教!!!
heshanxingzhe 2006-12-19
  • 打赏
  • 举报
回复
支持it115(风云清)
加一句,程序将更加健壮
import javax.swing.JOptionPane;
public class Num
{ public static void main(String args[])
{ String str;
int[] a=new int[10];
char c;
do
{ str=JOptionPane.showInputDialog("请输入一个十六位数");
}while(str.length()!=16);
for (int i=0;i<16;i++)
{ c=str.charAt(i);
switch(c)
{case '0': a[0]++;break;
case '1': a[1]++;break;
case '2': a[2]++;break;
case '3': a[3]++;break;
case '4': a[4]++;break;
case '5': a[5]++;break;
case '6': a[6]++;break;
case '7': a[7]++;break;
case '8': a[8]++;break;
case '9': a[9]++;break;
}
}
for(int j=0;j<=9;j++)
System.out.println(j+": "+a[j]);
}
}
malligator 2006-12-19
  • 打赏
  • 举报
回复
呵呵,有人顶了呀

突然想到
LZ这样更好吧
哪有那么麻烦的~
=======
import javax.swing.JOptionPane;
public class WhileFoo {
public static void main(String args[]){
String str;
long n;
int[] a=new int[10];
int i,j,m=0;

str=JOptionPane.showInputDialog("请输入一个十六位数");
n=Long.parseLong(str);
for (i=15;i>=0;i--)
{
m=(int)(n%10);//这里我上面少给了个强制转换哈,报错~不好意思
n=n/10;

a[m]++;
}
for(j=0;j<=9;j++)
System.out.println(a[j]);
}
}

===
LZ加点分吧
it115 2006-12-19
  • 打赏
  • 举报
回复
上面的程序刚测试过,没有问题
it115 2006-12-19
  • 打赏
  • 举报
回复
import javax.swing.JOptionPane;
public class Num {
public static void main(String args[]){
String str;
int[] a=new int[10];
char c;
str=JOptionPane.showInputDialog("请输入一个十六位数");
if(str.length()==16)
{
for (int i=0;i<16;i++)
{
c=str.charAt(i);
switch(c){
case '0': a[0]++;break;
case '1': a[1]++;break;
case '2': a[2]++;break;
case '3': a[3]++;break;
case '4': a[4]++;break;
case '5': a[5]++;break;
case '6': a[6]++;break;
case '7': a[7]++;break;
case '8': a[8]++;break;
case '9': a[9]++;break;
}
}
for(int j=0;j<=9;j++)
System.out.println(j+":"+a[j]);
}
else
System.out.println("输入的数据不够16位");
}
}
malligator 2006-12-19
  • 打赏
  • 举报
回复
晕,手误:
m=n%10;
n=n/n;
->
m=n%10;
n=n/10;
malligator 2006-12-19
  • 打赏
  • 举报
回复
而且,这两句:
m=(int)(n/Math.pow(10,i));
n=(long)(n-m*Math.pow(10,i));
->
m=n%10;
n=n/n;
能更好些吧.
后者统计是从个位开始,结果一样的(也有可能不一样,因为你的方法精度丢失:16位呀).

还有呀,说着分没用,你就给5分呀,连普通标准都达不到

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧