我遇到了创建连续数字数组的方法的问题(例如,如果输入1和10作为参数,数组将包含1-10中的每个数字),然后比较每个数字到另一个数字(例如4) - 如果数字匹配(例如4 == 4),则它从数组中删除该数字。最后它返回该数组。
我已经实施了下面有效的方法,但不是所有的时间,我不知道为什么?
例如,如果我创建了一个新数组并打印了每个数组:
<div class="fullscreen table-cell valign-middle text-center">
<input type="file" />
</div>
数组中省略了数字29?谁能告诉我为什么好吗?谢谢!
ArrayList<Integer> omittedDigitArray = new ArrayList<Integer>(Omit.allIntegersWithout(20, 45, 3));
System.out.println("Array - Numbers with Omitted Digit:");
for (int n : omittedDigitArray) {
System.out.print(n + ", ");
}
}
答案 0 :(得分:0)
你的内循环有问题。从列表中删除元素后,您应该从该循环中断开。否则,您可能会删除不相关的附加数字(如果省略的数字在相同的数字中出现多次)。
while (thisNumber != 0) {
thisDigit = thisNumber % 10; // Always equal to the last digit of thisNumber
thisNumber = thisNumber / 10; // Always equal to thisNumber with the last digit chopped off, or 0 if thisNumber is less than 10
if (thisDigit == omittedDigit) {
numberList.remove(j);
j--;
break; // add this
}
}
我运行了你的代码(+我建议的修复),范围是1到50,省略了数字4并得到了:
[1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 39, 50]
代码中的问题发生在处理44时 - 删除后(由于前4个,你继续while循环,找到另外4个并删除另一个数字,恰好是39,因为数字40已经删除了43个。)
答案 1 :(得分:0)
我建议的解决方案:
ArrayList<Integer> numberList = new ArrayList<Integer>();
// Loop creates an array of numbers starting at "from" ending at "to"
for (int i = from; i < to + 1; i++) {
numberList.add(i);
}
//removing all numbers that contain the digit
numberList.removeIf(j->containsDigit(j,thisDigit));
return numberList;
}
boolean containsDigit(int number,int thisDigit){
//making sure thisDigit is positive
thisDigit=Math.abs(thisDigit)
//if thisDigit is not a digit result is false
if(thisDigit>=10) return false;
//breaking the number into its digits
List<Integer> digits=new ArrayList<Integer>();
while(number>0){
digits.add(number%10);
number=(int) number/10;
}
return digits.contains(thisDigit);
}