java自定义类,数据传递的问题

【自定义的排序类】publicclassArraySort{/**参数a的值等于0为升序,否则为降序**/int[]a;intb;publicvoidsort(){if(... 【自定义的排序类】
public class ArraySort {
/**参数a的值等于0为升序,否则为降序
* */
int[] a;
int b;
public void sort(){
if(b == 0){
for (int i1 = 0; i1 < a.length; i1++) {
for (int i2 = i1 + 1; i2 < a.length; i2++) {
if (a[i1] > a[i2]) {
a[i1] = a[i1] + a[i2];
a[i2] = a[i1] - a[i2];
a[i1] = a[i1] - a[i2];
}}}
}else{
for (int i1 = 0; i1 < a.length; i1++) {
for (int i2 = i1 + 1; i2 < a.length; i2++) {
if (a[i1] < a[i2]) {
a[i1] = a[i1] + a[i2];
a[i2] = a[i1] - a[i2];
a[i1] = a[i1] - a[i2];
}}}}}}

【调用】
public class Test_1 {
public static void main(String[] args) {
ArraySort sort = new ArraySort();
int[] a = {12,45,22,6,3456,4,124,96,45,27};
sort.a = a;
sort.b = 1;
sort.sort();
for(int i = 0; i < a.length; i++){
System.out.print(a[i] + "\t" );
}
}
}

【结果得出a竟然还排序了!!! 可是这里我并没有当前的数组a排序啊! sort.sort()方法也只是把sort对象里面的数组属性a排序了。。。这是为什么?】
【或者sort方法写成
int[] sort[int[] a,int b]{
//对参数a排序
//最后return a;

}

然后我调用这个方法:
int[a] = {12,45,22,6,3456,4,124,96,45,27};
sort.sort(a,1);
【最后输出的结果也正确!奇怪啊,最后应该是a = sort.sort(a,1)才正确啊!求大神解答!!谢谢!!】
展开
 我来答
yugi111
2014-03-26 · TA获得超过8.1万个赞
知道大有可为答主
回答量:5.1万
采纳率:70%
帮助的人:1.3亿
展开全部
package zhidao;

public class ArraySort
{
/**
 * 参数a的值等于0为升序,否则为降序
 */
int[] a;
int b;

public void sort ()
{
if (b == 0)
{
for ( int i1 = 0; i1 < a.length; i1++ )
{
for ( int i2 = i1 + 1; i2 < a.length; i2++ )
{
if (a[i1] > a[i2])
{
a[i1] = a[i1] + a[i2];
a[i2] = a[i1] - a[i2];
a[i1] = a[i1] - a[i2];
}
}
}
}
else
{
for ( int i1 = 0; i1 < a.length; i1++ )
{
for ( int i2 = i1 + 1; i2 < a.length; i2++ )
{
if (a[i1] < a[i2]) // 如果前面的小于后面的
{
a[i1] = a[i1] + a[i2]; // a[i1] 加a[i2] 赋值给 a[i1]
a[i2] = a[i1] - a[i2]; // 原来的 a[i1] 赋值给 a[i2] 
a[i1] = a[i1] - a[i2]; // 原来的 a[i1] 赋值给 a[i1] 
}
// a[i1]最后没有变
// 最后变的是a[i2]
// 最终逻辑是:如果前面的小于后面的,前面的赋值给后面的
// 可以简化成
// a[i2] = a[i1];
// 与冒泡不同的是没有临时变量
// int temp = a[i1];
// a[i1] = a[i2];
// a[i2] = temp;
// 冒泡也是交互前后两个,前后两个相比较,就是冒泡的原理
}
}
}
}

public static void main ( String[] args )
{
ArraySort sort = new ArraySort ();
int[] a = { 12, 45, 22, 6, 3456, 4, 124, 96, 45, 27 };
sort.a = a;
sort.b = 1;
sort.sort ();
for ( int i = 0; i < a.length; i++ )
{
System.out.print (a[i] + "\t");
}
}
}
更多追问追答
追问
大哥- - 。你没看我的问题描述呀,我不是问排序呀,。。我是问类的调用。。。调用过程中数组赋值的问题。。。重点【】内的描述。。。
追答
数组是引用传递啊,不用再次赋值
longlongzhuerr
2014-03-26 · TA获得超过322个赞
知道小有建树答主
回答量:243
采纳率:100%
帮助的人:230万
展开全部
你可以在if开始的地方debug一下, 然后按F5一步一步执行,看看值得变化情况。
另外,java是面向对象编程,传递参数的方式有个叫传值调用,你这个比较类似下面这个简单的代码:
函数:public void exchange(int a,int b)
{
int temp=a;

a=b;

b=temp;

}
说明:函数内部操作的是参数,同理你上面的sort排序的时候也是操作的是传递进去的a数组;
调用:
public static void main(String args[])

{
int a=100;

int b=100;

temp(a,b);
}
说明:这里传递的是值,java是引用对象,所以会使引用的对象发生改变,同理,你上面的a传递给sort(),sort()会使a数组排序,有不正确的地方请纠正!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiaziling2011
2014-03-26 · 超过31用户采纳过TA的回答
知道答主
回答量:71
采纳率:0%
帮助的人:66.3万
展开全部
打个比方:
int[] a = {12,45,22,6,3456,4,124,96,45,27};表示a是你,初始化的值为你的银行卡密码

sort.a = a; sort.a表示别人,你把自己的银行卡密码告诉了别人

sort.sort(); 别人到银行去取你的钱了,假如去取1000

for(int i = 0; i < a.length; i++){
System.out.print(a[i] + "\t" ); 你查自己银行卡还有多少钱,肯定少了1000元
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
heganglaoda
2014-03-26 · TA获得超过204个赞
知道小有建树答主
回答量:179
采纳率:100%
帮助的人:172万
展开全部
数组是对象,对象赋值的是地址,也就是说数组a 和 数组sort.a 是指向同一个内存地址,他们其实是同一个数组,对sort.a的排序 也是对a的排序。
比如 int[] a 的地址是 0x001 //一个内存地址。
sort.a = a // sort.a == 0x001
他们在内存中寻址是相同的。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式