我试图在数组中执行整数排序,它运行正常。 但是当我尝试通过引用"通过引用传递来修改程序时#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个其他变量的错误。
答案 0 :(得分:3)
您正在尝试使用在您尝试使用它们的上下文中不存在的索引变量(XML::LibXML
和i
)(在p
方法体内)以及swap()
(Sort
和k
)的成员不存在。所有这些的范围,你只限于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
的参数。