java - java中将变量传递给静态方法意外结束

标签 java reference static

我只是想知道当方法选择、插入、气泡返回无效时,这段代码仍然如何工作。 是因为方法是静态的还是什么?

此外,如何在不进行异或运算的情况下交换变量?

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();
  }

}

最佳答案

Why are my methods working even though they return void?

Java 始终是按值传递的。但我们谈论的值(value)是什么?传递给函数的值是引用值,将其想象为数组所在的地址。因此,您始终在方法内部和外部引用相同的数组。

How to swap elements without Xoring them?

将变量想象成一个桶,你无法在不丢失其先前内容的情况下填充一个桶。您需要使用临时变量

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;

关于java - java中将变量传递给静态方法意外结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35829953/

相关文章:

java - 使用 Maven 在 Spring 4 上启用 JSP 模板

Java - 信号量中的优先级

java - 使用字母数字值对 Java 中的自定义对象列表进行排序

java - 公开一个以对象作为参数的方法的 Web 服务

java - 你将如何在 Java 中解决这个问题?任何引用未知数据的设计模式?

c++ - 从不同模块调用函数 - 引用错误

c++ - 通过使用(某种程度上)全局变量与静态函数变量来初始化值?

c++ - 用包含 const 成员的结构实例替换堆栈与静态变量

python - 使用 getattr 获取方法的对象引用

methods - 从特征实现静态方法时名称解析错误