计算重要数字java

时间:2013-12-23 17:47:59

标签: java significant-digits

我正在尝试制作一个计算重要数字的程序,我差不多完成了最后一件事,我完全陷入困境,我无法弄清楚如何计算非零数字之间的零点这里是我的代码:

public class Main {

    public static void main(String[] args) {
        String  Integer = "10010000000";
        String Substring = null;
        String SubString2 = null;
        if(Integer.contains(".")){
            Substring = Integer.substring(0,Integer.indexOf("."));
            System.out.println(Substring);
            SubString2 = Integer.substring(Integer.indexOf(".")+1,Integer.length());
            System.out.println(SubString2);
        }
        char [] array = Integer.toCharArray();
        char [] array1 = null;
        if(Substring !=null)
            array1 = Substring.toCharArray();
        char [] array2 = null;
        if(SubString2!=null)
            array2 = SubString2.toCharArray();
        System.out.println(amountofSigFigs(array,array1,array2,Integer));
    }
    public static int amountofSigFigs(char [] a,char [] a1,char [] a2,String Integer){
        int count = 0;
        if(a1==null && a2 == null){
            for(int i = 0;i<a.length;i++){
                if(!(a[i]=='0')){
                    count++;
                }
            }
        }
        else{
            for(int i = 0;i<a1.length;i++){
                if(!(a[i]=='0')){
                    count++;
                }
            }
            for(int i = 0;i<a2.length;i++){
                count++;
            }
        }
        return count;
    }

}

3 个答案:

答案 0 :(得分:2)

您不应该将“Integer”等关键字用于变量标识符。

我有一些挥之不去的问题,但我只是在字符串上使用Java的内置 split()函数,并使用正则表达式将字符串拆分为重要数字(忽略结束和前导零)。然后返回字符串长度的总和。这是纯整数的代码。

String myint = "000100101111220000020000";

String[] sig_figs = myint.split("(^0+|0+$)");

int sum = 0;

for(String fig : sig_figs)
{
    sum += fig.length();
}

return sum;

如果我们包含浮点数,则还需要考虑其他规则,例如小数点数后的零,除非它们前面都是全零(3.00有3,0.03有1)。在这种情况下,令人遗憾的是正则表达式变得更加人为,但我会使用类似"(^0+(\\.?)0*|(~\\.)0+$|\\.)"的东西来分裂。请参阅下面的代码(注意 - 仍然适用于整数)

String myfloat = "0.0120";

String [] sig_figs = myfloat.split("(^0+(\\.?)0*|(~\\.)0+$|\\.)");

int sum = 0;

for (String fig : sig_figs)
{
    sum += fig.length();
}

return sum;

以下是对正则表达式的快速了解:

^0+(\\.?)0*表示一个或多个前导零(0+),后跟可选的小数(\\.?),然后是零或更多的零(0*)。

(~\\.)0+$表示我们想要取消结尾零(0+$),但前提是它们前面没有小数((~\\.))。

\\.表示拆分小数点后面的任何内容。

答案 1 :(得分:0)

当您找到零时,启动单独的零计数。每次找到零时,继续递增零计数器而不是主计数器。如果找到非零数字,则将零计数值添加到主计数器,并将零计数器设置为0(重新启动它),以及为非零数字正常递增主计数器。相反,如果到达数字数组的末尾,则忽略零计数器。

因此,只有当零不是尾随零时才会将零计数器添加到主计数器,因此,sigfigs。

答案 2 :(得分:0)

以下代码将找出字符串中的0的数量

String s = "1234320300340";
    int count = 0;
    for(int i = 0; i<s.length(); i++){

        if(s.charAt(i)== '0'){
            count++;
        }
    }
    System.out.println("total no of Zeros = "+ count);