Java - 特定数字的重复函数

标签 java loops for-loop

我是编程新手,但我正在努力提高我作为程序员的技能。最近,我给自己提出了一个挑战,即确定给定数字的哪些倍数由不同的数字组成。我已经完成了其中的大部分工作,但我仍然需要让代码适用于输入数字的倍数的每个数字。到目前为止,我使用的代码如下:

Integer numberA = 432143;
Integer numberB = numberA;
Integer[] digitArray = new Integer[numberA.toString().length()];
int index;
for (index = 0; index < digitArray.length; index++) {
    digitArray[index] = (numberA % 10);
numberA /= 10;
}
int repeats = 0;
for (int i = 0; i < digitArray.length; i++) {
    for (int j = 0; j < digitArray.length; j++) {
    if ((i != j) && (digitArray[i]==digitArray[j])) repeats = repeats + 1;
    }
}
if (repeats == 0) {
  System.out.println(numberB);
}

这将确定数字是否由不同的数字组成,如果是,则将其打印出来。我花了相当多的时间来尝试使其余代码正常工作,这就是我想出的:

Integer number = 1953824;
Integer numberA = number;
Integer numberB = numberA;
for (Integer numberC = number; numberC.toString().length() < 11; 
            numberC = numberC + number) {
    Integer[] digitArray = new Integer[numberA.toString().length()];
    int index;
    for (index = 0; index < digitArray.length; index++) {
        digitArray[index] = (numberA % 10);
        numberA /= 10;
    }
    int repeats = 0;
    for (int i = 0; i < digitArray.length; i++) {
        for (int j = 0; j < digitArray.length; j++) {
            if ((i != j) && (digitArray[i]==digitArray[j])) repeats = repeats + 1;
        }
    }
    if (repeats == 0) {
        System.out.println(numberB); 
    }
}

我不明白为什么,但如果数字是由不同的数字组成,他就会打印很多次,如果不是,则将其留空。如果有人能告诉我为什么会发生这种情况,或者甚至告诉我我需要做些什么来修复它,那就太好了。请记住,我是编程新手,所以请对您使用的任何不寻常的术语进行简短解释。我渴望学习,但我目前知道的很少。感谢您的宝贵时间,我非常感谢您能给我的所有帮助。

最佳答案

您在 for 循环之前将 numberA 的值赋给 numberB(即 number 的值)。之后,numberB 永远不会被修改或分配给新值,因此对于每次通过 for 循环,您只是打印 numberB 的值,在本例中它始终为 1953824。

可以进行一些更正以获得您想要的结果,同时稍微清理一下代码。第一件事是更改打印语句以打印正确的数字:

System.out.println(numberC);

由于 numberC 是由 for 循环更新的变量,如果没有重复数字,这就是您要有条件地打印出来的内容。由于我们已将 numberB 替换为 numberC,这意味着不再需要 numberB,您可以删除它的声明。

现在,下一个问题是定义数字数组时 - 您应该使用 numberC 的长度,而不是 numberA。此外,在 for 循环内,您应该为 numberA 分配 numberC 的值,否则最终只会将 0 存储在您的 digitArray 中。总的来说,它应该是这样的。

    Integer number = 1953824;
    Integer numberA = number;

    for (Integer numberC = number; numberC.toString().length() < 11; 
                    numberC = numberC + number) {

        Integer[] digitArray = new Integer[numberC.toString().length()];
        numberA = numberC;
        int index;
        for (index = 0; index < digitArray.length; index++) {
            digitArray[index] = (numberA % 10);
            numberA /= 10;
        }
        int repeats = 0;
        for (int i = 0; i < digitArray.length; i++) {
            for (int j = 0; j < digitArray.length; j++) {
                if ((i != j) && (digitArray[i] == digitArray[j]))
                    repeats = repeats + 1;
            }
        }
        if (repeats == 0) {
            System.out.println(numberC);
        }
    }

这应该会产生预期的结果。它似乎在我的机器上工作:)

如果需要,可以采纳 Jeffrey 的建议,将 Integer 更改为原始 int 以避免装箱的开销。但是,您仍然需要使用 Integer 类来使用 toString() 方法,但您可以使用 Integer 来完成。 valueOf ():

Integer.valueOf(numberC).toString()

关于Java - 特定数字的重复函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14765072/

相关文章:

java - 当我停止线程(Mythread.stop();)并且我去做某事然后我想再次使用线程时如何

function - 在 pine 脚本中使用循环时更改元组值

r - 如何在 R 环境中循环遍历编号数据帧。我必须在 R 中循环 22 个(可能是 22*6)数据帧

java - JPA 2.0 的 XSD

java - 链表是抽象数据类型还是数据结构?

optimization - 循环遍历二维数组的最快方法?

c - 没有第一条语句的循环(C 到 Visual Basic)

Javascript:for 循环检索并打印一定量的 API 数据

Perl 创建散列引用并一次从每个分支循环一个元素

java - log4j-slf4j-impl/log4j v2 - 设置自定义 log4j.xml 目标