Java 整数变量不符合while循环条件

Java 整数变量不符合while循环条件,java,arrays,for-loop,while-loop,int,Java,Arrays,For Loop,While Loop,Int,关于数组和int变量,我的代码一直存在问题。在我遇到问题的部分中,我试图检查用户输入自己整数的数组是否按递增顺序,如果按递增顺序,则打印该数组;否则,将显示一条错误消息。我尝试使用int两个变量来实现这一点,一个名为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){

关于数组和int变量,我的代码一直存在问题。在我遇到问题的部分中,我试图检查用户输入自己整数的数组是否按递增顺序,如果按递增顺序,则打印该数组;否则,将显示一条错误消息。我尝试使用int两个变量来实现这一点,一个名为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 <(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为零,则打印数组中的整数;如果为1,则显示错误消息。 问题是,无论我输入什么,orderCheck1始终变为1,因此始终打印错误消息。我的代码有什么问题


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

我建议一种方法:

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

请注意,这可以正确处理大小为0或1的数组的边缘情况。

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

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

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

while (c1 <(list1.length-1)){
  if (list1[c1] >list1[(c1+1)]){
    orderCheck1 =1;
  }
  c1++;
}
请注意,list1.length仍然是10000,即使用户没有输入10000个值。一旦使用新的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。当您使用调试器单步执行代码时,您会看到什么?你确定没有存储结尾-1吗?你提供了什么数组作为输入,你是如何读取该输入的?b1是什么?如果b1可能小于list1.length,那么这是否意味着while循环正在检查数组中不存在的数据?是的,我确定。我试着在没有订单检查的情况下打印这个东西,并且没有包含负值。如果评论没有帮助你解决问题,你需要向我们展示更多的代码。请参阅有关创建最小、完整、可验证示例的信息。您没有做的是告诉他应该作为参数传递什么。他只有一个长度为10000的数组。好的,谢谢!我会试试看,然后再打给你。我之所以将数组长度设置为10000,是因为我的AP老师告诉我们要这样做,因为我们还没有学习arraylist