簡體   English   中英

將變量傳遞給Java中的靜態方法意外結束

[英]Passing variables to static methods in java ends unexpectedly

我只是想知道當方法選擇,插入,冒泡返回void時,此代碼仍如何工作。 是因為方法是靜態的還是什么?

此外,如何在不對變量進行XOR的情況下交換變量?

public class Sorts {

static int[] a = { 100, 90, 70, 60, 50, 40, 30, 20, 10, 7, 6, 5, 4, 3, 2, -1 };

public static void main(String[] args) {
    // TODO Auto-generated method stub

    bubbleSort(a);// Worst one
    print(a);

    int[] b = {100, 90, 70, 60, 50, 40, 30, 20, 10, 7, 6, 5, 4, 3, 2, -1};

    MY_SEMI_SELECTION_Sort(b);
    print(b);

    int[] e = { 100, 90, 70, 60, 50, 40, 30, 20, 10, 7, 6, 5, 4, 3, 2, -1};
    selectionSort2(e);
    print(e);

    int[] c = {100, 90, 70, 60, 50, 40, 30, 20, 10, 7, 6, 5, 4, 3, 2, -1};
    insertionSort(c); // The best so far
    print(c);

}

static void insertionSort(int[] arr) {

    int len = arr.length;

    for (int i = 1; i < len; ++i) {

        int j = i;

        while (j > 0 && arr[j] < arr[j - 1]) {
            // Swap
            arr[j] ^= arr[j - 1] ^= arr[j];
            arr[j - 1] ^= arr[j];

            --j;
        }
    }

}

static void MY_SEMI_SELECTION_Sort(int[] arr) {

    int len = arr.length;

    for (int i = 0; i < len; ++i) {

        for (int k = i; k < len - 1; ++k) {

            if (arr[i] > arr[k + 1]) {
                // Swapping........
                arr[i] ^= arr[k + 1] ^= arr[i];
                arr[k + 1] ^= arr[i];

            }

        }

    }

}

static void selectionSort2(int[] arr) {

    int len = arr.length;

    for (int i = 0; i < len; ++i) {

        int k;
        int minIndex = i;

        for (k = i; k < len - 1; ++k) {

            if (arr[minIndex] > arr[k + 1]) {
                minIndex = k + 1;
            }

        }

        if (arr[minIndex] != arr[i]) {
            arr[minIndex] ^= arr[i] ^= arr[minIndex];
            arr[i] ^= arr[minIndex];
        }

    }

}

static void bubbleSort(int[] arr) {

    int len = arr.length;

    for (int i = 0; i < len; ++i) {

        for (int k = 0; k < len - 1; ++k) {

            if (arr[k] > arr[k + 1]) {
                // Swapping........
                arr[k] ^= arr[k + 1] ^= arr[k];
                arr[k + 1] ^= arr[k];

            }

        }

    }

}

static void swap(int a, int b) {

    int temp = b;
    b = a;
    a = temp;
}

static void print(int[] arr) {

    int len = arr.length;

    for (int i = 0; i < len; ++i) {
        System.out.print(arr[i] + " ");
    }
    System.out.println();
  }

}

即使我的方法返回void,為什么我的方法仍然有效?

Java總是按值傳遞。 但是,我們在談論什么價值? 傳遞給函數的值是參考值,將其想象為數組所在的地址。 因此,您始終在方法內部和外部引用同一數組。

如何在不異化元素的情況下交換元素?

想象變量為存儲桶,您不能在不丟失其先前內容的情況下填充它。 您需要使用一個臨時變量

int a=1,b=2;
int tmp=a;
a=b;    //without the previous line of code you'd have lost the value of 'a'
b=tmp;

是因為方法是STATIC否,因為int數組a僅是引用。 在調用不同的方法時,會將相同的引用作為參數傳遞。 如果int數組a是main的局部變量,則結果也將相同。

如何在不對元素進行Xor的情況下交換元素交換變量的最佳方法是通過XOR。

a = a ^ b;
b = a ^ b;
a = a ^ b;

另一種方法是使用臨時變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM