关于数组和int变量,我的代码一直有问题。在我遇到问题的部分中,我试图检查数组(其中用户输入自己的整数)是否按递增顺序排列,如果按递增顺序排列,则打印数组;如果不按递增顺序排列,则显示错误消息。我尝试使用int-two变量来实现这一点,一个称为c1,另一个称为ordercheck1(都初始化为0)。

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 
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总是变成一个,所以错误消息总是被打印出来。我的代码有什么问题?

注意:当用户在数组中输入值时,应该输入一个负数以停止输入值。

使用调试器单步执行代码时,您会看到什么?您确定不存储结束的-1吗?

您提供什么数组作为输入,以及如何读取该输入?

什么是b1?如果b1可以小于list1.length,那么这是否意味着你的while循环正在检查数组中不存在的数据?

是的,我确定。我试着在没有订单检查的情况下打印,不包括负值。

如果注释没有帮助您解决问题,您需要向我们显示更多的代码。请参阅有关创建最小的、完整的、可验证的示例的信息。

你应该在orderCheck1 = 1;后加break。另外,如果您在数组中输入最后一个负数,那么while条件应该是while(c1 。在循环之前,必须将ordercheck初始化为0。

嗯,它仍然打印出我的错误信息…

我认为,主要的问题是,您已经分配了一个包含10000个元素的列表,而您并没有全部使用它们。Java将元素初始化为0。(请注意,在某些其他语言中,这样的构造可以将元素初始化为随机垃圾值。)

然后编写一个循环,输入数字,直到用户输入一个负数。这将为某个数字n设置循环的前n个元素。但其余元素不会从数组中截断。它们仍然在那里,它们仍然是0。

这会导致此循环出现问题:

while (c1 
if (list1[c1] >list1[(c1+1)]){
orderCheck1 =1;
}
c1++;
}

注意,即使用户没有输入10000个值,list1.length仍然是10000个。一旦用new int[10000]或类似的东西创建了一个数组,就可以修复数组的.length。此长度不能更改。这意味着无论输入多少值,c1都将达到9999。

因此,在某一点上,您会遇到这样一个情况:您开始比较创建数组时放入数组中的0值。因为用户输入的所有值都是正数,所以当list[c1]是最后输入的值时,list1[c1] > list1[c1+1]将为真,因为list1[c1+1]仍为0。

解决方案是,不要让c1进入list1.length-1系统,我认为,当它达到少于用户条目的数目时,你必须停止它。看起来您已经有了一个计算条目数的b1,因此需要将while更改为while (c1

还有一件事:当您有一个这样的数组,它的大小实际上不知道时,最好使用ArrayList。与int[]不同,ArrayList将随着添加元素而增长,size()方法将返回实际添加的元素数。

好的,谢谢!我会试试这个,然后再给你答复。我将数组长度设置为10000的原因是我的AP老师告诉我们这样做,因为我们还没有学习数组列表。

因此,我尝试使用while(c1 而不是list1.length,但效果很好!现在我知道空元素被初始化为0。非常感谢@ajb

我建议一种方法:

static boolean isAscending(int[] nums) {
for (int i = 1; i < nums.length; i++)
if (nums[i - 1] > nums[i])
return false;
return true;
}

请注意,这将正确处理大小为零或一的数组的边缘大小写。

你还没做的就是告诉他作为参数应该传递什么。他唯一拥有的int[]是一个长度为10000的数组。