Java增量/减小操作员在呼叫内部



我们正在学习有关QuickSort的知识。这本书在我的问题结束时提供了代码。

我对FindPivot方法末尾的电话感到好奇:

swap(array, left++, right--);

为什么在那里有" "one_answers" - "?它不会增加/减少一个变量(交换之前或之后),也无法访问(例如)数组[左 1]。

那么什么给了

编辑

所以在我发布问题之前,我写了以下测试代码:

public static void main(String[] args) {
    int a = 0;
    int b = 2;
    int[] array = {1,10,20,30};
    swap(array, a++,b--);
}
public static void swap(int[]array,int a, int b) 
{
    for(int i = 0; i < 10; i++)
    {
    Integer temp = array[a];
   array[a] = array[b];
   array[b] = temp;
    System.out.println("a = " + a + "nb = " + b + "narray a: " + array[a] + "narray b: " + array[b]);
    }

结果如下:

a = 0b = 2阵列A:20阵列B:1a = 0b = 2阵列A:1阵列B:20a = 0b = 2阵列A:20阵列B:1

在方法中使用时,该变量根本没有插入后。这就是为什么我问这个问题。

谢谢。这是代码:

private static void swap(Integer[] array, int i, int j)
{
   Integer temp = array[i];
   array[i] = array[j];
   array[j] = temp;
}
public static void quickSort(Integer[] array, int left, int right)
{
    if(left < right)
    {
        int pivot = findPivot(array, left, right);
        quickSort(array, left, pivot - 1);
        quickSort(array, pivot + 1, right);
    }
}//quickSort
public static int findPivot(Integer[] array, int left, int right)
{
    int first = left++;
    while (left <= right)
    {
        while (left <= right && array[first].compareTo(array[left]) > 0)
        {
            left++;
        }
        while (left <= right && array[first].compareTo(array[right]) < 0)
        {
            right--;
        }
        if (left < right)
            swap(array, left++, right--);
    }
    swap(array, first, right);
    return right;
}

它是提交后(§15.14.2)( ++)和启动后(§15.14.3)( --)操作。这些将改变您的while循环中的下一次迭代的值。

您基本上有:

while (left <= right)
{
    // ...
    if (left < right)
    {
        swap(array, left, right);
        left++;
        right--;
    }
}

您可以看到,"帖子"意味着该值对该特定语句不受影响。评估后增量操作后,它将增加变量,但是传递给该方法的值仍然是旧的。对于高级读者,您可以像这样编写收入后操作员(伪代码):

public int operator this++()
{
    int temp = this;
    ++this; // regular pre-increment (JLS §15.15.1)
    return temp;
}

有关通知前操作员的阅读,您可以检查JLS§15.15.1。

swap(array, left++, right--);while循环内部,因此更新值将在下一个循环迭代中使用。

java增量(++)和减少(--)假设i++;这意味着i+1i--表示i-1在编程

int i = 1;
System.out.println("i : "+(i++)); // this means first print then add `1` into i;
//and
System.out.println("i : "+(++i)); // this means first add one and then print it;
// same for '--' 

它们是帖子增量( )和后降低( - )操作,因此它们将在您的下一个迭代中更改您的下一个迭代中的值

在此行中的代码中

   swap(array, left++, right--);//left++ , right-- are post increment (++) and post decrement (--) operation

最新更新