我对编程非常陌生,但我正在努力提高我作为程序员的技能。最近,我给了自己一个挑战,以确定给定数字的倍数是由不同的数字组成的。我已经完成了大部分工作,但我仍然需要让代码适用于输入数量的每个数字。我到目前为止所使用的代码如下:
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);
}
}
我无法弄清楚为什么,但是如果它由不同的数字组成,那么他只会打印任何数字,如果它不是,则将其留空。如果有人能告诉我为什么会这样,或者甚至告诉我我需要做些什么来解决它,那将是一流的。请记住,我对编程非常陌生,所以请简单解释一下您使用的任何与众不同的术语。我渴望学习,但我目前知之甚少。感谢您的时间,我非常感谢您能给我的任何帮助。
答案 0 :(得分:1)
您在for循环之前将numberA的值赋给numberB(这是number的值)。之后,numberB永远不会被修改或分配给新值,所以对于每次遍历for循环,你只需要打印numberB的值,在这种情况下总是1953824。
可以进行多项更正以达到您想要的效果,同时稍微清理一下代码。第一件事是更改print语句以打印正确的数字:
System.out.println(numberC);
由于numberC是for循环正在更新的变量,因此如果没有重复数字,那么您需要有条件地打印出来。由于我们用numberC替换了numberB,这意味着不再需要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的建议并将整数更改为原始int,以避免拳击的开销。但是,您仍然需要使用Integer类来使用toString()方法,但您可以使用Integer完成此操作。valueOf():
Integer.valueOf(numberC).toString()
答案 1 :(得分:0)
因此,如果我理解正确,您正试图找出您的号码中是否存在某些倍数。而不是不断地除以10而是使用模数符号。您甚至可以将其嵌入条件语句中。
例如:
if(numberOne % 2 == 0)
然后我们知道numberOne除以2的余数为零,因此是2的倍数