请各位指教,找找错误,这个程序运行不了啊!
程序的作用是输入一个长整数然后计算各个位数的和!例如:12345 和为:1+2+3+4+5=15,谢谢啦!!import javax.swing.JOptionPane;
public class Sum {
public static void main(String[] args) {
String number =JOptionPane.showInputDialog("请输入一个整数!");
int m=number.length();;
int sum=0,i;
int n=Integer.parseInt(number);
int arr[]=new int[m-1];
String output="";
for( i=0;i<=number.length()-1;i++){
arr[i]=n/(int)Math.pow(10,m-i);
sum +=arr[i];
arr[i]=n % (int)Math.pow(10,m-i);
output ="各位数之和为: "+sum;
}
JOptionPane.showMessageDialog(null,output);
}
}
----------------解决方案--------------------------------------------------------
1 这个程序,之所以运行错误,是因为数组声明太小。"int arr[]=new int[m-1]; " arr只有m-1个,
而“ for( i=0;i<=number.length()-1;i++){”循环次数是m个,所以错误。需要把
int arr[]=new int[m-1]; 改成int arr[]=new int[m];
2 楼主的逻辑错误,这个程序不能求出各个位数之和.得到的是0+1+12+123+1234
arr[i]=n % (int)Math.pow(10,m-i);这句没有起到任何作用。
3 正确的程序为
public static void main(String[] args) throws IOException {
String number =JOptionPane.showInputDialog("请输入一个整数!");
int n=Integer.parseInt(number);
int sum=0;
while(n!=0){
sum+=n%10;
n=n/10;
}
JOptionPane.showMessageDialog(null,"各位数之和为:"+sum);
}
最后说明一点,Math.pow(10,m-i);幂函数的效率并不高,能有更好的方法当然不用的好
----------------解决方案--------------------------------------------------------
按你的程序,可以这样改:
import javax.swing.JOptionPane;
public class Sum {
public static void main(String[] args) {
String number =JOptionPane.showInputDialog("请输入一个整数!")
int m=number.length();
int sum=0,i;
int n=Integer.parseInt(number);
int arr[]=new int[m];
String output="";
for( i=0;i<=number.length()-1;i++){
arr[i]=n/(int)Math.pow(10,m-i-1);
arr[i]=arr[i] % 10;
sum +=arr[i];
System.out.println("arr[" + i +"]=" + arr[i]);//输出每位数的值
output ="各位数之和为: "+sum;
}
JOptionPane.showMessageDialog(null,output);
}
}
----------------解决方案--------------------------------------------------------
你的问题是数组越界,定义数组时应该为int arr[] = new int[m];
再则,你这种求各数之和的做法不好;
import javax.swing.JOptionPane;
public class Sum {
public static void main(String[] args) {
String number = JOptionPane.showInputDialog("请输入一个整数!");
int length = number.length();
int sum = 0;
while (length > 0) {
sum += Integer.parseInt(number.charAt(length - 1) + "");// 将字符转换成对应的数字
length--;
}
JOptionPane.showMessageDialog(null, "各位数之和为" + sum);
}
}
----------------解决方案--------------------------------------------------------
谢谢各位的指正,小弟会加倍努力,呵呵呵!!
----------------解决方案--------------------------------------------------------