当前位置: 代码迷 >> Java相关 >> 请各位指教,找找错误,这个程序运行不了啊!
  详细解决方案

请各位指教,找找错误,这个程序运行不了啊!

热度:94   发布时间:2010-04-19 12:46:18.0
请各位指教,找找错误,这个程序运行不了啊!
程序的作用是输入一个长整数然后计算各个位数的和!例如: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);
    }

}
----------------解决方案--------------------------------------------------------
谢谢各位的指正,小弟会加倍努力,呵呵呵!!
----------------解决方案--------------------------------------------------------
  相关解决方案