实验1对象和类.docx
《实验1对象和类.docx》由会员分享,可在线阅读,更多相关《实验1对象和类.docx(14页珍藏版)》请在冰豆网上搜索。
实验1对象和类
成绩:
面向对象原理与Java实践课程实验报告
实验1:
对象和类
姓名__xxxx__
班级_xxxxxxxxxx__
学号__xxxxxxxxxxx__
实验地点__软件实验室_
实验时间_2010.03.23_
指导教师__xxxx
面向对象原理与Java实践课程实验报告
实验1:
对象和类
一、实验目的:
●掌握类的定义及应用方法
●掌握对象的创建方法,了解实例变量、实例方法和静态字段的特性
●体会Java在类和对象的设计中体现的面向对象的思想
二、实验要求:
●预习Java中对象和类的基本概念和应用方法
●设计类时注意保证类的封装性
●编写程序完成以下实验内容并上交实验报告
三、实验内容:
1、尝试两人合作编写程序,加深对方法的接口与实现的理解。
其中一人负责编写方法isPrime(),用于判断一个给定的正整数是否素数,另一个人负责编写主方法main(),利用isPrime()验证著名的哥德巴赫猜想:
任何比2大的偶数都可表示为两个素数之和。
(提示:
验证必须有上界,程序未调试成功之前应先选择一个较小的上界,调试成功后再换成较大的上界。
上界可由用户输入,否则应定义为一个符号常量。
)
2、设计一个简单的日期类Date,然后编写一个主程序演示该类的用法。
(提示:
一个日期至少具有年、月、日等属性,其行为有初始化、修改日期、返回描述日期的字符串、返回该日期的年、月、日等。
)
3、试设计一个带有四则运算的复数类,并编写主程序演示其用法。
(提示:
一个复数Complex由两部分组成:
实部realPart和虚部imaginaryPart,两个复数可进行加、减、乘、除四则运算。
)
四、设计思路:
1、1
用方法isPrime()来判断通过方法setPrime()输入的正整数是否是素数并输出明示,并编写main()方法调用方法setPrime()和方法isPrime()演示其功能。
1、2
用方法setPrime()实现输入的是正整数,用方法twoPrime()使输入为偶数并进而找出和为所输正偶数的素数对并输出,写出main()方法。
2
定义日期所用变量并进行初始化,定义修改日期的方法changeDate()用布尔变量flag来实现程序的结束与否,用displayDate()输出日期,用方法showTips()制出菜单,写出main()方法演示程序功能。
3
定义两个做运算的复数的实部和虚部,分别定义两个复数进行加运算的方法、减运算的方法、乘运算的方法和除运算的方法并用方法yunsuan()来实现它们,定义输出菜单的方法showTips(),并编写main()方法演示对复数的四则运算功能。
五、程序源代码:
1、1验证一个数是不是素数
importjava.util.InputMismatchException;
importjava.util.Scanner;
publicclassPrimeNumber{
privateintprime;
booleanflag=true;
protectedintsetPrime(){
Scanner_prime=null;
System.out.print("请输入要验证的正整数:
");
_prime=newScanner(System.in);
prime=_prime.nextInt();
if(prime<=0){
System.out.println(prime+"不是正整数,素数只能是正整数的,请再来一次!
");
setPrime();
}
returnprime;
}
protectedvoidisPrime(){
intmark=0;
for(inti=1;i<=prime;i++){
if(prime%i==0){
mark++;
}
}
if(mark>2){
System.out.println(prime+"不是素数!
");
}else{
System.out.println(prime+"是素数!
");
}
}
publicstaticvoidmain(String[]args){
PrimeNumberprimenumber=newPrimeNumber();
while(primenumber.flag){
try{
primenumber.setPrime();
primenumber.isPrime();
}catch(InputMismatchExceptionims){
System.out.println("您的输入与要求不一致,请确定后重新来过!
");
}
}
}
}
运行结果:
请输入要验证的正整数:
-4
-4不是正整数,素数只能是正整数的,请再来一次!
请输入要验证的正整数:
3
3是素数!
请输入要验证的正整数:
4
4不是素数!
请输入要验证的正整数:
1、2验证著名的哥德巴赫猜想
importjava.util.InputMismatchException;
importjava.util.Scanner;
publicclassGoldbach{
privateintprime;
booleanflag=true;
protectedintsetPrime(){
Scanner_prime=null;
System.out.print("请输入要验证的正整数:
");
_prime=newScanner(System.in);
prime=_prime.nextInt();
if(prime<=0){
System.out.print(prime+"不是正整数,素数只能是正整数的,请再来一次!
");
setPrime();
}
returnprime;
}
protectedvoidtwoPrime(){
if(prime%2!
=0){
System.out.println(prime+"不是偶数,这里需要输入偶数,请再来一次!
");
setPrime();
}
inti=1;
intnum=0;
while(i<=prime/2){
intmark1=0;
intmark2=0;
for(intj=1;j<=i;j++){
if(i%j==0){
mark1++;
}
}
for(intm=1;m<=(prime-i);m++){
if((prime-i)%m==0){
mark2++;
}
}
if(mark1==2&mark2==2){
num++;
System.out.println(prime+"="+i+"+"+(prime-
i));
}
i+=2;
}
System.out.print("共有"+num+"组");
}
publicstaticvoidmain(String[]args){
Goldbachgoldbach=newGoldbach();
while(goldbach.flag){
try{
goldbach.setPrime();
goldbach.twoPrime();
}catch(InputMismatchExceptionime){
System.out.print("您的输入与要求不一致,请确定后重新来过!
");
}
}
}
}
执行结果:
请输入要验证的正整数:
3
3不是偶数,这里需要输入偶数,请再
请输入要验证的正整数:
-5
-5不是正整数,素数只能是正整数的,请
44=3+41
44=7+37
44=13+31
共有3组请输入要验证的正整数:
2日期
importjava.util.InputMismatchException;
importjava.util.Scanner;
publicclassMyDate{
intyear;
intmonth;
intday;
intnum_order;//接受来自命令行的输入,int类型,只要负责showTips()的命令代号和日期的修改
booleanflag=true;//控制程序的退出,当flag=false时,退出
publicMyDate(){
year=2008;
month=8;
day=8;
}
//这个构造函数未用
publicMyDate(intyear,intmonth,intday){
this.year=year;
this.month=month;
this.day=day;
}
//showTips()用于提示用户相关操作代号
publicvoidshowTips(){
System.out.println("1修改年份");
System.out.println("2修改月份");
System.out.println("3修改日份");
System.out.println("4修改全部");
System.out.println("5退出修改");
}
publicvoidchangeDate(){
Scanner_order=newScanner(System.in);
System.out.print("请输入您的命令:
");
//下面的数字异常没有捕获
num_order=_order.nextInt();
if(num_order==1){
System.out.println("请输入新的年份:
");
year=_order.nextInt();
System.out.println();
}elseif(num_order==2){
System.out.println("请输入新的月份:
");
month=_order.nextInt();
System.out.println();
}elseif(num_order==3){
System.out.println("请输入新的日份:
");
day=_order.nextInt();
System.out.println();
}elseif(num_order==4){
System.out.println("请输入新的年份:
");
year=_order.nextInt();
System.out.println("请输入新的月份:
");
month=_order.nextInt();
System.out.println("请输入新的日份:
");
day=_order.nextInt();
System.out.println();
}
elseif(num_order==5){
flag=false;
System.out.println("程序结束");
}
}
publicvoiddisplayDate(){
if(month>=0&&month<=12&&day>=1&&day<=31){
System.out.println("目前的日期为:
"+year+"年"+month+"月"+day
+"日");
}else{
System.out.print("您的输入与设计情况不相符,请确认后重新来过!
");
}
showTips();
changeDate();
}
publicstaticvoidmain(String[]args){
MyDatemydate=newMyDate();
while(mydate.flag){
try{
mydate.displayDate();
}catch(InputMismatchExceptionime){
System.out.print("您的输入与要求不一致,请确定后重新来过!
");
mydate.changeDate();
}
}
}
}
运行结果:
目前的日期为:
2008年8月8日
1修改年份
2修改月份
3修改日份
4修改全部
5退出修改
请输入您的命令:
2
请输入新的月份:
12
目前的日期为:
2008年12月8日
1修改年份
2修改月份
3修改日份
4修改全部
5退出修改
请输入您的命令:
3一个带有四则运算的复数类
importjava.util.InputMismatchException;
importjava.util.Scanner;
publicclassComplex{
doublea1;
doubleb1;
doublea2;
doubleb2;
booleanflag=true;
Scanner_param=newScanner(System.in);
doubleparam;
publicComplex(){
super();
System.out
.println("首先要构造出两个复数,两个复数的形式如下:
\n"
+"comp1=a1+b1*i\n"
+"comp2=a2+b2*i\t(a1,a2,b1,b2∈R)");
System.out.println("下面要求输入四个参数(a1,b1,b1,b2)的值:
");
System.out.println("输入a1的值:
");
a1=_param.nextDouble();
System.out.println("输入b1的值:
");
b1=_param.nextDouble();
System.out.println("输入a2的值:
");
a2=_param.nextDouble();
System.out.println("输入b2的值:
");
b2=_param.nextDouble();
System.out.println("构造出两个复数的形式如下:
"
+"\n
(1)comp1="+a1+"+"+b1+"*i\n"
+"
(2)comp2="+a2+"+"+b2
+"*i");
}
publicvoidshowTips(){
System.out.println("1---加法运算\t");
System.out.println("2---减法运算\t");
System.out.println("3---乘法运算\t");
System.out.println("4---除法运算\t");
System.out.println("5---退出程序\t");
}
publicvoidyunsuan(){
Scanner_param=null;
showTips();
_param=newScanner(System.in);
System.out.println("请选择您要进行的操作:
");
param=_param.nextInt();
if(param==1){
add();
}elseif(param==2){
subtract();
}elseif(param==3){
multiply();
}elseif(param==4){
divide();
}elseif(param==5){
System.out.println("程序结束");
flag=false;
}else{
System.out.println("您输入的代号不是程序的代号,请确定后重新来过!
\n\n");
yunsuan();
}
}
publicvoidadd(){
System.out.println("加法运算的结果为:
comp="+(a1+a2)+"+"
+(b1+b2)+"*i");
System.out.println("此次的加法运算到此已完成!
");
}
publicvoidsubtract(){
System.out.println("减法运算的结果为:
comp="+(a1-a2)+"+"
+(b1-b2)+"*i");
System.out.println("此次的减法运算到此已完成!
");
}
publicvoidmultiply(){
System.out.println("乘法运算的结果为:
comp="+(a1*a2-b1*b2)+"+"
+(a1*b2+a2*b1)+"*i");
System.out.println("此次的乘法运算到此已完成!
");
}
publicvoiddivide(){
System.out.println("是comp1除以comp2还是comp2除以comp1,请做出选择!
");
System.out.println("1comp1除以comp2");
System.out.println("2comp2除以comp1");
System.out.println("请输入操作:
");
param=_param.nextInt();
if(param==1){
System.out.println("comp1和comp2除法运算的结果为:
comp="+(a1*a2-b1*b2)
/(a2*a2+b2*b2)+"+"+(a2*b1-a1*b2)
/(a2*a2+b2*b2)+"*i");
System.out.println("此次的除法运算到此已完成!
");
}elseif(param==2){
System.out.println("comp2和comp1除法运算的结果为:
comp="+(a1*a2-b1*b2)
/(a2*a2+b2*b2)+"+"+(a2*b1-a1*b2)
/(a2*a2+b2*b2)+"*i");
System.out.println("此次的除法运算到此已完成!
");
}
}
publicstaticvoidmain(String[]args){
Complexcomplex=newComplex();
while(complex.flag){
try{
complex.yunsuan();
}catch(InputMismatchExceptionime){
System.out.println("您的输入与要求不一致,请确定后重新来过!
");
}
}
}
}
运行结果:
首先要构造出两个复数,两个复数的形式如下:
comp1=a1+b1*i
comp2=a2+b2*i(a1,a2,b1,b2∈R)
下面要求输入四个参数(a1,b1,b1,b2)的值:
输入a1的值:
1
输入b1的值:
2
输入a2的值:
3
输入b2的值:
4
构造出两个复数的形式如下:
(1)comp1=1.0+2.0*i
(2)comp2=3.0+4.0*i
1---加法运算
2---减法运算
3---乘法运算
4---除法运算
5---退出程序
请选择您要进行的操作:
1
加法运算的结果为:
comp=4.0+6.0*i
此次的加法运算到此已完成!
1---加法运算
2---减法运算
3---乘法运算
4---除法运算
5---退出程序
请选择您要进行的操作:
六、实验过程中遇到的问题及解决手段:
刚开始对素数的判定问题不是很清楚,通过与同学之间的交流渐渐明白其基本思路,还有就是对有些语句的用法不是很熟通过看课本加深了理解。
七、本次实验的体会(结论):
通过本次试验我对java有了更深入的了解,熟悉了java有些语句的基本用法和java编程的一般过程,增加了java编程的兴趣,深刻体会到动手的重要性以及同学之间的交流的重要性。