循环条件时不跟随整数变量

时间:2014-12-09 01:21:23

标签: 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){
  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总是变成一个,因此始终打印错误消息。我的代码出了什么问题?

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

2 个答案:

答案 0 :(得分:0)

我建议采用一种方法:

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

请注意,这会处理大小为零或一个正确数组的边缘情况。

答案 1 :(得分:0)

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

然后编写一个输入数字的循环,直到用户输入负数。这将为某些数字 n 设置循环的第一个 n 元素。但其余的元素不会被阵列切断。他们仍在那里,他们仍然是0。

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

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

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

因此,在某些时候,您将在创建它时开始与数组中放入的0值进行比较。由于用户输入的所有值均为正数,因此当list1[c1] > list1[c1+1]是输入的最后一个值时,list[c1]将为真,因为list1[c1+1]仍为0。

解决方案是,不要让c1升级到list1.length-1,而是当它到达时,我必须停止它,少于用户条目的数量。看起来您已经有b1来计算条目数,因此while需要更改为while (c1 < some-expression-that-uses-b1 )。我会让你努力让这个上限正确。

还有一件事:如果你有一个这样的数组,其大小并不为人所知,那么使用ArrayList会更好。与int[]不同,ArrayList<Integer>会在向其添加元素时增长,size()方法将返回实际添加的元素数。