0

我正在尝试制作一个计算有效数字的程序,但我几乎完成了最后一件事,我完全陷入困境我无法弄清楚如何计算非零数字之间的零这是我的代码:

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;
    }

}
4

3 回答 3

2

您不应该使用诸如“整数”之类的关键字作为变量标识符。

我有一些挥之不去的问题,但我会简单地对字符串使用 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+$),但前提是它们前面没有小数 ( (~\\.))。

\\.表示拆分小数点剩下的任何内容。

于 2013-12-23T17:58:40.863 回答
0

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

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

于 2013-12-23T17:54:43.393 回答
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);
于 2013-12-23T18:16:44.273 回答