将简单数字转换为由各个数字组成的数组

7

我是一个刚开始学习编程的新手,但我正在努力提高自己作为程序员的技能。目前,我正在解决一个由自己给出的问题,即将一个变量中的每个数字转换成一个单独的数字并存储在数组中。我不关心这些数字的顺序,所以如果它们被反转,对我来说并不重要。我知道很多人已经问过这个问题,但他们总是使用了我不理解的很多东西。由于我的学校没有提供Java课程,我只知道我自己学到的知识,所以如果您能解释一下代码中使用的任何术语,那将非常好。目前,我已经写了:

int number = 1234567890;
    while (number > 0) {
        System.out.println(number%10);
        number = number/10; 

这对于逐个打印数字的操作很有效,但是我无法想出如何将它们添加到数组中。非常感谢您能提供的任何帮助,请记住,我更喜欢简单而不是小巧。提前致谢!
附言:我看到类似问题的一些回答包括我认为是字符串数组。为了使我正在工作的程序部分仍然有效,我认为需要使用整数数组。如果您好奇,其余代码用于确定数组中的数字是否都不同,以达到确定数字的各个数字是否都不同的最终结果。它看起来像这样:
int repeats=0;
int[] digitArray;
digitArray = new int[10];
for (int i = 0; i < digitArray.length; i++) 
    for (int j = 0; j < digitArray.length; j++)
        if ((i != j) && (digitArray[i]==digitArray[j])) unique = unique+1;
System.out.println(unique==0);

在这种情况下,我们事先不知道大小,所以我认为这里使用ArrayList会很好。如果您使用ArrayList,您只需要执行yourList.add(number%10);由于自动装箱,从Java5开始它将起作用。 - kosa
我不太清楚什么是ArrayList...它是像数组一样,但名称不同且具有动态大小吗? - user2049256
1
是的,它是由数组支持的动态数组。http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html - kosa
@MatthewTyler.. 没错。我已经在我的回答的第一行添加了文档链接。你可以去查看一下。 - Rohit Jain
这真是个太棒的地方!我会研究一下那个列表数组。看起来它不仅可以帮助我解决这个问题,而且在将来也可能非常有用。非常感谢你的帮助。 - user2049256
Integer.toString(n).chars().map(a->a-'0').toArray(); - David S Alderson
4个回答

9

方法number.toString().length()会返回数字的位数,这与所需数组的长度相同。然后你可以像以前一样使用你的代码,但是不要打印,而是将这个数字添加到数组中。

int number = 1234567890;
int len = Integer.toString(number).length();
int[] iarray = new int[len];
for (int index = 0; index < len; index++) {
    iarray[index] = number % 10;
    number /= 10;
}

哇!回复好快啊。这真的很有帮助。我唯一的问题是,为什么你使用“Integer”而不是我通常使用的“int”? - user2049256
1
@MatthewTyler.. 你也可以使用 int。这里并不一定需要使用 Integer。实际上,你应该尽可能地使用 int。只有在无法管理时才使用 Integer,例如在泛型 ArrayList 声明中,你不能使用 ArrayList<int>,而只能使用 ArrayList<Integer> - Rohit Jain
@RohitJain.. 我明白了。我从未听说过使用Integer,所以我认为我会尽可能坚持使用int。 - user2049256
我使用Integer,因为int没有toString()方法,这意味着你必须使用ArrayList而不是简单的数组。 - Max Dietz
@MaxDietz 这与Integer类中的toString方法有什么关系?这将如何影响使用int[]而不是Integer[] - Rohit Jain
编辑后更清晰。在初始化数组时,需要知道其长度,这是一个比ArrayList简单的数据结构,长度等于数字的数量。为了做到这一点,将其转换为字符串并计算字符数就相当于知道数字的数量。Integer是封装int的对象,基本上它存储一个int但也有一些方法,如toString,equals等。它有一点膨胀,并且可以被我的编辑所替代,即如下所示的静态方法Integer.toString - Max Dietz

5
我建议您使用ArrayList,因为要使用数组,您需要预先分配大小,而要知道数字的位数,您却不知道。
所以,要么使用数组,在数字上进行两次迭代 - 一次用于查找大小,下一次用于执行实际工作。否则,请继续使用ArrayList
ArrayList添加元素非常简单。您只需使用适当的参数调用List#add(E)方法即可。
因此,这是您解决方案的扩展:-
// Declare a List<Integer>, since it will store integers only.
List<Integer> digits = new ArrayList<Integer>():

int number = 1234567890;
while (number > 0) {
    int digit = number % 10;  // Store digit in a variable
    number = number/10;

    // Add digit to the list
    digits.add(digit);
}

或者,如果您希望在List中仅有唯一的数字,则应使用HashSet,它会自动删除重复项。


1
请查看文档 - http://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html。 HashSet就是一个Set,它只存储唯一的元素。你知道数学中的set吧?就是那个意思。你可以在文档中获取更多细节。 - Rohit Jain
我明白了,谢谢你的信息。我会尝试一下。你知道为什么当数字太大时它会出现错误吗?我的当前代码如下: - user2049256
1
@MatthewTyler.. 因为你无法在 int 类型中存储太大的数字。请尝试使用 long 类型来表示你的原始数字。 - Rohit Jain
哦,我明白了。谢谢。我收到了一个警告,不要在评论中使用扩展讨论,所以现在我会停止打扰你。你给了我巨大的帮助。谢谢你,祝你有美好的一天。 - user2049256
@MatthewTyler.. 你对这个解决方案有什么问题吗? - Rohit Jain
显示剩余3条评论

0
char [] arr = scan.next().toCharArray();

这段代码将从scan.next()读取一个数字,然后将其作为输入提供给char数组,该数组将把数字的每个位数作为单个数字存储在其索引中。

希望这能有所帮助。


0

使用Java 8:

Integer.toString(n).chars().map(a->a-'0').toArray()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接