Integer variable not following while loop conditions
关于数组和int变量,我的代码一直有问题。在我遇到问题的部分中,我试图检查数组(其中用户输入自己的整数)是否按递增顺序排列,如果按递增顺序排列,则打印数组;如果不按递增顺序排列,则显示错误消息。我尝试使用int-two变量来实现这一点,一个称为c1,另一个称为ordercheck1(都初始化为0)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | int[ ] list1 = new int [10000]; int a1 =0; int b1 =0; int c1 =0; int value1; int orderCheck1 =0; while (a1 ==0){ if (b1 < list1.length){ value1 = scan.nextInt(); //checks to see if value entered is positive if (value1 >=0){ list1[b1] = value1; b1++; } else{ a1 =1; } } } while (c1 <(list1.length-1)){ if (list1[c1] >list1[(c1+1)]){ orderCheck1 =1; } c1++; } if (orderCheck1 ==0){ for (int i =0; i < b1; i++){ System.out.print (list1[i] +""); } } else{ System.out.println ("ERROR: One or both arrays are not in an increasing order.); } |
基本上,如果数组中的数字大于它后面的数字,ordercheck将变为1。在代码后面,它检查ordercheck1是零还是一。如果ordercheck1为零,则会打印数组中的整数;如果为零,则会显示错误消息。问题是,不管我输入什么,ordercheck1总是变成一个,所以错误消息总是被打印出来。我的代码有什么问题?
注意:当用户在数组中输入值时,应该输入一个负数以停止输入值。
我认为,主要的问题是,您已经分配了一个包含10000个元素的列表,而您并没有全部使用它们。Java将元素初始化为0。(请注意,在某些其他语言中,这样的构造可以将元素初始化为随机垃圾值。)
然后编写一个循环,输入数字,直到用户输入一个负数。这将为某个数字n设置循环的前n个元素。但其余元素不会从数组中截断。它们仍然在那里,它们仍然是0。
这会导致此循环出现问题:
1 2 3 4 5 6 | while (c1 <(list1.length-1)){ if (list1[c1] >list1[(c1+1)]){ orderCheck1 =1; } c1++; } |
号
注意,即使用户没有输入10000个值,
因此,在某一点上,您会遇到这样一个情况:您开始比较创建数组时放入数组中的0值。因为用户输入的所有值都是正数,所以当
解决方案是,不要让
还有一件事:当您有一个这样的数组,它的大小实际上不知道时,最好使用
我建议一种方法:
1 2 3 4 5 6 | static boolean isAscending(int[] nums) { for (int i = 1; i < nums.length; i++) if (nums[i - 1] > nums[i]) return false; return true; } |
请注意,这将正确处理大小为零或一的数组的边缘大小写。