1

我正在尝试创建一个代码,其中将采用如下数字:

"787191230"

并返回:

"0 1 1 2 3 7 7 8 9"

现在,我的错误是我的代码以某种方式正确打印出第一个,然后开始添加 LOTS 的 0,我认为这是一种模式。每次增加的 0 的数量似乎一直在下降,但这很烦人。

我的主要代码(一切都完成了):

import java.util.Arrays; 
import java.util.Scanner;
import java.io.File;
import java.io.IOException;
import static java.lang.System.*;

public class NumberSorter
{
    static int count = 0;
    private static int getNumDigits(int number)
    {
        while(number>0){

                number=number/10;
            count++;
        }
        return count;
    }

    public static int[] getSortedDigitArray(int number)
    {
        int[] sorted = new int[getNumDigits(number)];
        for(int a = 0; a<sorted.length; a++)
        {
            sorted[a] = number%10;
            number = number/10;
        }
        for(int a = 0; a<sorted.length; a++)
        {
            int y = a;
            for(int b = a+1; b<sorted.length; b++)
            {
                if(sorted[b]<sorted[y])
                {

                    y = b;
                }
            }
            if(y != a)
            {
                int temp = sorted[y];
                sorted[y]=sorted[a];
                sorted[a]=temp;
            }
        }
        return sorted;
    }
}

测试用例代码(我尝试解码的所有数字都在其中):

public class NumberSorterRunner
{
    public static void main(String args[])
    {
        int[] cases = {567891, 901912468, 864213507, 898777, 234422, 29826};
        for( int test : cases )
        {
            int[] one = NumberSorter.getSortedDigitArray( test );
            for(int item : one)
            {
                System.out.print(item + " ");
            }
            System.out.println();
        }
    }
}

最后但并非最不重要的是:输出:

1 5 6 7 8 9 
0 0 0 0 0 0 0 1 1 2 4 6 8 9 9 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 7 7 8 8 9 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 3 4 4 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 6 8 9 

任何帮助,主要是提示,都会让我非常感激!我无法弄清楚这有什么问题!提前致谢。

4

4 回答 4

1

Yopu 已声明count为静态,但您从未重置它,因此对于每个新测试,都count从前一个测试的最后一个值开始。

它不需要是静态的或可广泛访问的,因此只需将其移动到getNumDigits()函数内

尝试这个:

private static int getNumDigits(int number)
{
    int count = 0;
    while(number>0){

            number=number/10;
        count++;
    }
    return count;
}
于 2013-10-25T02:25:29.413 回答
0

尝试以下简单代码:

public static void main(String args[])
{
    int[] cases = {567891, 901912468, 864213507, 898777, 234422, 29826};
    for( int test : cases )
    {
       String numStr=String.valueOf(test);
       char[] digits=numStr.toCharArray();
        Arrays.sort(digits);
       String sorted=new String(digits);

        for (int i = 0; i < sorted.length(); i++) {
            System.out.print(" "+sorted.charAt(i));                
        }
        System.out.println();
    }
}

输出:

1 5 6 7 8 9
0 1 1 2 4 6 8 9 9
0 1 2 3 4 5 6 7 8
7 7 7 8 8 9
2 2 2 3 4 4
2 2 6 8 9
于 2013-10-25T02:29:14.257 回答
0

您已计数为 NumberSorter 的静态成员,您可能应该将其保留为方法范围的变量。

于 2013-10-25T02:24:32.743 回答
0

您的getNumDigits行为不正确。

static int count = 0;
private static int getNumDigits(int number)
{
    while(number>0){
        number=number/10;
        count++;
    }
    return count;
}

你为什么要count留在身边?只需声明一个局部变量:

private static int getNumDigits(int number)
{
    int count = 0;
    while(number>0){
        number=number/10;
        count++;
    }
    return count;
}
于 2013-10-25T02:24:38.807 回答