java--在main方法中添加代码完成要求的功能

在main方法中添加代码完成要求的功能
public class ex4 {
public static void main(String args[])
{
//No.1 添加语句构造一个CFushu类的对象c1表示复数3+6i,构造一个CFushu类的对象c2表示复数7+6i,
//No.2 添加语句构造CFushu类对象c3复制为c1和c2的和(调用CFushu类中的add方法求c1与c2的和)
//No.3 添加语句显示输出c3的实部和虚部值,与实际运算的c1与c2和值比较是否吻合
//No.4 添加语句显示输出c1和c2的实部和虚部,观察其变化,分析原因
CFushu c0=new CFushu(3,4);
}
}
class CFushu//描述复数
{
double m_Real;//表示复数的实部
double m_Image;//表示复数的虚部
void CFushu(double real,double image)//定义构造函数
{
m_Real=real;
m_Image =image;
}
CFushu add(CFushu fushu)//实现当前复数和参数复数fushu的加法
{
fushu.m_Real+=m_Real;//和值结果保存在fushu对象中
fushu.m_Image+=m_Image;
return this;
}
}
不对
编译通不过

public class ex4 {
public static void main(String args[]) {
// No.1 添加语句构造一个CFushu类的对象c1表示复数3+6i,构造一个CFushu类的对象c2表示复数7+6i,
CFushu c1=new CFushu(3,6);
CFushu c2=new CFushu(7,6);
// No.2 添加语句构造CFushu类对象c3复制为c1和c2的和(调用CFushu类中的add方法求c1与c2的和)
CFushu c3=c1.add(c2);
// No.3 添加语句显示输出c3的实部和虚部值,与实际运算的c1与c2和值比较是否吻合
System.out.println("c3的实部="+c3.m_Real+" c3虚部 ="+c3.m_Image );
// No.4 添加语句显示输出c1和c2的实部和虚部,观察其变化,分析原因
System.out.println("c1的实部="+c1.m_Real+" c1虚部 ="+c1.m_Image );
System.out.println("c2的实部="+c2.m_Real+" c2虚部 ="+c2.m_Image );

}
}

class CFushu// 描述复数
{
double m_Real;// 表示复数的实部
double m_Image;// 表示复数的虚部

public CFushu(double real, double image)// 定义构造函数
{
m_Real = real;
m_Image = image;
}

CFushu add(CFushu fushu)// 实现当前复数和参数复数fushu的加法
{
fushu.m_Real += m_Real;// 和值结果保存在fushu对象中
fushu.m_Image += m_Image;
return this;
}
}
结果:
c3的实部=3.0 c3虚部 =6.0
c1的实部=3.0 c1虚 =6.0
c2的实部=10.0 c2虚 =12.0

为什么明明c3是c1和c2的和,应该是10,12,但c3却和c1相等,而c2变成了c1和自身的和,分析:

c3 = c1.add(c2);
关键在这里是c1调用的add(c2);方法,而传进去的是c2的引用。在来看
这个方法的实现
CFushu add(CFushu fushu)// 实现当前复数和参数复数fushu的加法
{
fushu.m_Real += m_Real;// 和值结果保存在fushu对象中
fushu.m_Image += m_Image;
return this;
}
fushu.m_Real += m_Real;//fushu.m_Real 是c2的属性,+= m_Real 是c1的属性
这样就将c1的实部和c2的实部相加,得到的值再付给c2的实部。由于传的是c2的引用,因此通过c2的引用改变了c2实部的值,而c1的实部没有改变,仍是3。就如同注释中说的“和值结果保存在fushu对象中”这个fushu对象就是c2对象。虚部同理。

return时 ,返回的是this, 因为是c1.add()也就是说,这个this是c1对象,而c1对象没有任何变化,因此返回给c3的是c1对象。
所以出现上述情况。

如果将add()改为 c3 = c2.add(c1);
结果为:
c3的实部=3.0 c3虚部 =6.0
c1的实部=10.0 c1虚 =12.0
c2的实部=3.0 c2虚 =6.0
道理同上。
如果楼主想达到的目的是c1,c2本身值不变,c3为他们的和,只需将add()改为
CFushu add(CFushu fushu)// 实现当前复数和参数复数fushu的加法
{
return new CFushu(fushu.m_Real+m_Real,fushu.m_Image+m_Image);
}
这样没有改变传进去的对象值,返回出的新对像的值是c1和c2的和。

累!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-11-11
CFushu c1=new CFushu(3,6);
CFushu c2=new CFushu(7,6);
CFushu c3=c1.add(c2);
System.out.println("c3.m_Real="+c3.m_Real+" c3.m_Image ="+c3.m_Image )
System.out.println("c1.m_Real="+c1.m_Real+" c1.m_Image ="+c1.m_Image )
System.out.println("c2.m_Real="+c2.m_Real+" c2.m_Image ="+c2.m_Image )
第2个回答  推荐于2016-01-31
直接在类里面添加就可以;
比如说: hello.java 文件
public class hello
{
public static void main(String args[])
//添加MAIN方法,程序的入口,在类hello里面。
{
System.out.println("Hello world!");
}
}
第3个回答  2009-11-11
类CFushu的构造函数不能有返回值!!