gpt4 book ai didi

JAVA方法中按引用传递错误

转载 作者:行者123 更新时间:2023-12-01 22:02:45 26 4
gpt4 key购买 nike

我试图对数组中的整数进行排序,效果很好。但是,当我尝试通过方法包含“按引用传递”概念来修改程序时,它会抛出错误“找不到符号”。

我是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 个此类错误。

最佳答案

您正在尝试使用在您尝试使用它们的上下文中不存在的索引变量(ip)(在 swap( ) 方法体)以及 Sort成员(karr)不存在。所有这些的范围,你都限制在 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 的可访问成员

public class Sort {
public static int k; //now accessible with m.k
public static int[] arr = new int[10]; //now accessible with m.arr
...
}

最后,你的数组长 10 但你只用 5 个数字填充它是故意的吗?

传递引用

Java 中没有“按引用传递”。一切都是按值传递的。令人困惑的是,按值传递的内容在技术上是对对象的引用,这意味着您会得到奇怪的效果,例如您可以编辑对象但不能重新分配它。

关于JAVA方法中按引用传递错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33433390/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com