nested for loops integers missing from array
这里是初学者。我在运行这个for循环序列以查找数组中缺少的整数时遇到问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public class FunWithArrays{ public static void main(String[] args){ String nString = args[0]; int n = Integer.parseInt(nString); int inputArray [] = {1,2,4}; System.out.println(" The missing numbers are" ); findMissingNum(n, inputArray); } public static void findMissingNum(int n, int[] inputArray){ for (int i = 1; i <= inputArray.length; i++){ int count = 0; for( int j = 0; j < n; j++){ if(inputArray[j] == i){ count ++; } if (count == 0){ System.out.println(i); } } } } } |
我得到了我想要的答案,即3,但是它不打印,而是显示在运行时错误中:
1 2 3 | java.lang.ArrayIndexOutOfBoundsException: 3 at FunWithArrays.findMissingNum(FunWithArrays.java:17) at FunWithArrays.main(FunWithArrays.java:9) |
号
该方法应该从用户(当程序运行时)处获取输入n作为数组的最大值,并打印所有缺少的值。逻辑是外部for循环应遍历数组中的数字1-n,内部循环应在每次找到某个数字时添加到count变量中。在迭代结束时,它应该打印最终"计数"为0的任何数字。这简直让我发疯了!!!!事先谢谢:)
首先,您应该从0遍历到inputaray的(inputaray.length-1)索引。因为Java数组索引从0开始,而不是从1开始,这将去掉ArayIdExxOutOfFunsExtExchange。
对于内环,从0到n,因为n是最大数。
第三,它应该是inputaray[i]==j,而不是inputaray[j]==i,与打印值相同。在您的情况下,我相信您有n>=4,所以它试图通过inputaray[j]调用访问inputaray[3]。这就是为什么你得到这个超出界限的错误。
我认为您的代码的意思是:嵌套循环在运行外部循环之前总是先运行内部循环。
1 2 3 4 5 6 7 8 9 10 11 12 13 | public static void findMissingNum(int n, int[] inputArray){ for (int i = 1; i <= n; i++){ int count = 0; for( int j = 0; j < inputArray.length; j++){ if(inputArray[j] == i){ count ++; } if (count == 0){ System.out.println(i); } } } } |
我只使用while循环:
1 2 3 4 5 6 7 8 9 | int num =1; while(num<=n){ for(int i = 0;i<inputArray.length;i++){ if(inputArray[i]!=num){ System.out.println(num); } } num++; } |
号
另外,不应该从一开始就检查