它不会检查数组是否按升序排列

时间:2014-01-22 21:51:07

标签: arrays sorting

   int [] ary1 = new int [100];
   int [] ary2 = new int [100];


   System.out.println("Enter no more than 100 integers in ascending order. To end, enter a negative number.");
   int num1 = user.nextInt();
   int count1 = 0;
   while ((num1 > -1) && (count1 < ary1.length)){
   ary1[count1] = num1;
   count1++;
   num1 = user.nextInt();

这是第一个阵列。

用户可以输入不超过100个整数,如果用户输入负数,则会停止。

    if (num1 < 0){ 
    System.out.println("Enter your second list of integers from least to greatest. To end, enter a negative number.");
    int num2 = user.nextInt();
    int count2 = 0;
    while ((num2 > -1) && (count2 < ary2.length)){
    ary2[count2] = num2;
    count2++;
    num2 = user.nextInt();

这是第二个阵列。

用户可以输入不超过100个整数,如果用户输入负数,则会结束。

    if (num2 < 0){
      for (int one = 0; one < count1; one++){
        System.out.print(ary1[one]+" ");}   

打印出第一个整数列表

      System.out.println("");     **//skip a line**

      for (int two =0; two < count2; two++){
        System.out.print(ary2[two]+" ");}   p

删除第二个整数列表

      System.out.println("");     **//skip a line**

问题出在这里,它不会检查数组是否按升序排列。 ↓↓↓

       int inOrder = 0;    
      for (int check1 = 0; check1 < count1-1; check1++){
        if (ary1[check1] > ary1[check1++]){
          System.out.println("Error: Array not in correct order.");
          break;
        }else{
           inOrder = 1;
        }}

        for (int check2 = 0; check2 < count2-1; check2++){
        if (ary2[check2] > ary2[check2++]){
          System.out.println("Error: Array not in correct order.");
          break;
        }else{
          inOrder = 1;
        }} 



        }}
    }  }}}

如果inOder = 1,我将需要合并2个数组。

2 个答案:

答案 0 :(得分:1)

您的问题在于如何增加check1和check2变量:

if (ary1[check1] > ary1[check1++]){ }
if (ary2[check2] > ary2[check2++]){ }

对于这些循环,您使用的是check1++check2++。将++放在变量名称的末尾将计算增量之前的表达式值。在变量名之前放置++首先递增变量,然后计算表达式。解决方法是重新定位++,如下所示:

if (ary1[check1] > ary1[++check1]){ }
if (ary2[check2] > ary2[++check2]){ }

查看这篇文章以更好地理解前缀/后缀运算符:

Java: Prefix/postfix of increment/decrement operators?

更新:其他用户注意到,由于循环控制也执行了两次,增量实际上发生了两次。要解决此问题,请将++check1替换为check + 1。我觉得这个被认为是正确的,我几乎感到内疚!

答案 1 :(得分:0)

++是问题所在:

if (ary1[check1] > ary1[check1++])

将其更改为:

if (ary1[check1] > ary1[check1 + 1])