JAVA通过方法中的引用错误传递

时间:2015-10-30 10:07:18

标签: java

我试图在数组中执行整数排序,它运行正常。 但是当我尝试通过引用"通过引用传递来修改程序时#34;通过一种方法的概念,它是抛出错误"找不到符号"。

我是JAVA的新手并且是我自己学习的,请帮助我解决我在这里做错的事。

import java.util.*;
import java.io.*;

public class Sort {

    public static void main(String[] args) {

        Sort obj = new Sort();

        Scanner in = new Scanner(System.in);
        int i, p, k, arr[];
        arr = new int[10];
        System.out.println("Enter the numbers for sorting \n");
        for (i = 0; i < 5; i++) {
            arr[i] = in.nextInt();
        }

        for (i = 0; i < 5; i++) {
            for (p = 0; p < 5; p++) {
                if (arr[i] < arr[p]) {
                    /*
                     * moving the below block for swapping to a new method. k =
                     * arr[i]; arr[i]= arr[p]; arr[p]= k;
                     */

                    obj.swap(obj);
                }

            }
        }
        System.out.println("\n");
        for (i = 0; i < 5; i++)
            System.out.println(arr[i]);

    }

    public void swap(Sort m) {
        m.k = m.arr[i];
        m.arr[i] = m.arr[p];
        m.arr[p] = m.k;

    }

}

我得到的错误是:

"Sort.java:44: error: cannot find symbol
      m.k = m.arr[i];
       ^
"

同样也有10个其他变量的错误。

2 个答案:

答案 0 :(得分:3)

您正在尝试使用在您尝试使用它们的上下文中不存在的索引变量(XML::LibXMLi)(在p方法体内)以及swap()Sortk)的成员不存在。所有这些的范围,你只限于arr的方法体: -

main()

短期解决方案

public void swap(Sort m) { m.k = m.arr[i]; //No 'i' in swap(). No 'k' or 'arr' in 'm'(an instance of 'Sort') m.arr[i] = m.arr[p]; //No 'p' in swap() m.arr[p] = m.k; } 方法更改为

swap()

然后像这样称呼它

//Now accepting in i and p
public void swap(Sort m, int i, int p) {
    m.k = m.arr[i];      
    m.arr[i] = m.arr[p]; 
    m.arr[p] = m.k;
}

并将obj.swap(obj, i, p); //pass in i and p 变量移至Sort

的可访问成员
Sort

最后,您的数组是否有意长10,但只填充5个数字?

<强>传递通过引用

Java中没有“pass-by-reference”。一切都是通过价值传递的。令人困惑的是,通过值传递的内容在技术上是对对象的引用,这意味着你会得到奇怪的效果,就像你可以编辑对象但不能重新分配它。

答案 1 :(得分:0)

解决方案:将内容从swap方法移回原位。

或者,提供必要的值作为swap的参数。