成绩:
面向对象原理与Java实践课程实验报告
实验1:对象和类
姓 名 _ _xx xx__
班 级 _ xxxxxxxxxx__
学 号 _ _xxxxxxxxxxx_ _
实验地点 _ _软件实验室_
实验时间 _ 2010.03.23_
指导教师 _ _xx xx
1
面向对象原理与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()方法演示对复数的四则运算功能。
2
五、程序源代码:
1、1验证一个数是不是素数
import java.util.InputMismatchException; import java.util.Scanner; public class PrimeNumber { private int prime; boolean flag = true;
protected int setPrime() { Scanner _prime = null;
System.out.print(\"请输入要验证的正整数:\"); _prime = new Scanner(System.in); prime = _prime.nextInt();
if (prime <= 0) {
System.out.println(prime + \"不是正整数,素数只能是正整数的,请再来一次!\"); setPrime(); }
return prime; }
protected void isPrime() { int mark = 0;
for (int i = 1; i <= prime; i++) { if (prime % i == 0) { mark++; } }
if (mark > 2) {
System.out.println(prime + \"不是素数!\"); } else {
System.out.println( prime + \"是素数!\"); } }
public static void main(String[] args) { PrimeNumber primenumber = new PrimeNumber(); while (primenumber.flag) { try { primenumber.setPrime(); primenumber.isPrime(); } catch (InputMismatchException ims) { System.out.println(\"您的输入与要求不一致,请确定后重新来过!\"); } } }
3
}
运行结果:
请输入要验证的正整数:-4
-4不是正整数,素数只能是正整数的,请再来一次! 请输入要验证的正整数:3 3是素数!
请输入要验证的正整数:4 4不是素数!
请输入要验证的正整数: 1、2验证著名的哥德巴赫猜想
import java.util.InputMismatchException; import java.util.Scanner; public class Goldbach { private int prime; boolean flag = true;
protected int setPrime() { Scanner _prime = null;
System.out.print(\"请输入要验证的正整数:\"); _prime = new Scanner(System.in); prime = _prime.nextInt(); if (prime <= 0) {
System.out.print(prime + \"不是正整数,素数只能是正整数的,请再来一次!\"); setPrime(); }
return prime; }
protected void twoPrime() { if (prime % 2 != 0) {
System.out.println(prime + \"不是偶数,这里需要输入偶数,请再来一次!\"); setPrime(); }
int i = 1; int num = 0;
while (i <= prime / 2) { int mark1 = 0; int mark2 = 0;
for (int j = 1; j <= i; j++) { if (i % j == 0) { mark1++; } }
for (int m = 1; m <= (prime - i); m++) { if ((prime - i) % m == 0) { mark2++;
4
} }
if (mark1 == 2 & mark2 == 2) { num++;
System.out.println(prime + \" = \" + i + \" + \" + (prime - i)); }
i += 2; }
System.out.print(\"共有\" + num + \"组\"); }
public static void main(String[] args) { Goldbach goldbach = new Goldbach(); while (goldbach.flag) { try {
goldbach.setPrime(); goldbach.twoPrime();
} catch (InputMismatchException ime) {
System.out.print(\"您的输入与要求不一致,请确定后重新来过! \"); } } } }
执行结果:
请输入要验证的正整数:3
3不是偶数,这里需要输入偶数,请再 请输入要验证的正整数:-5
-5不是正整数,素数只能是正整数的,请 44 = 3 + 41 44 = 7 + 37 44 = 13 + 31
共有3组请输入要验证的正整数: 2日期
import java.util.InputMismatchException; import java.util.Scanner; public class MyDate { int year; int month; int day;
int num_order;// 接受来自命令行的输入,int类型,只要负责showTips()的命令代号和日期的修改
boolean flag = true;// 控制程序的退出,当flag = false时,退出
5
public MyDate() { year = 2008; month = 8; day = 8; }
// 这个构造函数未用
public MyDate(int year, int month, int day) { this.year = year; this.month = month; this.day = day; }
// showTips()用于提示用户相关操作代号 public void showTips() {
System.out.println(\"1修改年份\"); System.out.println(\"2修改月份\"); System.out.println(\"3修改日份\"); System.out.println(\"4修改全部\"); System.out.println(\"5退出修改\"); }
public void changeDate() {
Scanner _order = new Scanner(System.in); System.out.print(\"请输入您的命令:\"); // 下面的数字异常没有捕获 num_order = _order.nextInt(); if (num_order == 1) {
System.out.println(\"请输入新的年份:\"); year = _order.nextInt(); System.out.println();
} else if (num_order == 2) {
System.out.println(\"请输入新的月份:\"); month = _order.nextInt(); System.out.println();
} else if (num_order == 3) {
System.out.println(\"请输入新的日份:\"); day = _order.nextInt(); System.out.println();
} else if (num_order == 4) {
System.out.println(\"请输入新的年份:\"); year = _order.nextInt();
System.out.println(\"请输入新的月份:\"); month = _order.nextInt();
System.out.println(\"请输入新的日份:\"); day = _order.nextInt();
6
System.out.println(); }
else if (num_order == 5) { flag = false;
System.out.println(\"程序结束\"); } }
public void displayDate() {
if (month >= 0 && month <= 12 && day >= 1 && day <= 31) {
System.out.println(\"目前的日期为:\" + year + \"年\" + month + \"月\" + day + \"日\"); } else {
System.out.print(\"您的输入与设计情况不相符,请确认后重新来过!\"); }
showTips(); changeDate(); }
public static void main(String[] args) { MyDate mydate = new MyDate(); while (mydate.flag) { try {
mydate.displayDate();
} catch (InputMismatchException ime) {
System.out.print(\"您的输入与要求不一致,请确定后重新来过!\"); mydate.changeDate(); } } } }
运行结果:
目前的日期为:2008年8月8日 1修改年份 2修改月份 3修改日份 4修改全部 5退出修改
请输入您的命令:2 请输入新的月份: 12
目前的日期为:2008年12月8日 1修改年份 2修改月份 3修改日份
7
4修改全部 5退出修改
请输入您的命令:
3一个带有四则运算的复数类
import java.util.InputMismatchException; import java.util.Scanner; public class Complex { double a1; double b1; double a2; double b2;
boolean flag = true;
Scanner _param = new Scanner(System.in); double param;
public Complex() { super(); System.out
.println(\"首先要构造出两个复数,两个复数的形式如下:\\n\" + \"comp1 = a1 + b1*i\\n\"
+ \"comp2 = a2 + b2*i\(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\"); }
public void showTips() {
System.out.println(\"1---加法运算\ \"); System.out.println(\"2---减法运算\ \"); System.out.println(\"3---乘法运算\ \"); System.out.println(\"4---除法运算\ \"); System.out.println(\"5---退出程序\ \"); }
public void yunsuan() { Scanner _param = null;
8
showTips();
_param = new Scanner(System.in);
System.out.println(\"请选择您要进行的操作:\"); param = _param.nextInt(); if (param == 1) { add();
} else if (param == 2) { subtract();
} else if (param == 3) { multiply();
} else if (param == 4) { divide();
} else if (param == 5) {
System.out.println(\"程序结束\"); flag = false; } else {
System.out.println(\"您输入的代号不是程序的代号,请确定后重新来过!\\n\\n\"); yunsuan(); } }
public void add() {
System.out.println(\"加法运算的结果为:comp = \" + (a1 + a2) + \" + \" + (b1 + b2) + \"*i\");
System.out.println(\"此次的加法运算到此已完成!\"); }
public void subtract() {
System.out.println(\"减法运算的结果为:comp = \" + (a1 - a2) + \" + \" + (b1 - b2) + \"*i\");
System.out.println(\"此次的减法运算到此已完成!\"); }
public void multiply() {
System.out.println(\"乘法运算的结果为:comp = \" + (a1 * a2 - b1 * b2) + \" + \" + (a1 * b2 + a2 * b1) + \"*i\");
System.out.println(\"此次的乘法运算到此已完成!\"); }
public void divide() {
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)
9
/ (a2 * a2 + b2 * b2) + \"*i\");
System.out.println(\"此次的除法运算到此已完成!\"); } else if (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(\"此次的除法运算到此已完成!\"); } }
public static void main(String[] args) { Complex complex = new Complex(); while (complex.flag) { try {
complex.yunsuan();
} catch (InputMismatchException ime) {
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
10
此次的加法运算到此已完成! 1---加法运算 2---减法运算 3---乘法运算 4---除法运算 5---退出程序
请选择您要进行的操作:
六、实验过程中遇到的问题及解决手段:
刚开始对素数的判定问题不是很清楚,通过与同学之间的交流渐渐明白其基本思路,还有就是对有些语句的用法不是很熟通过看课本加深了理解。
七、本次实验的体会(结论):
通过本次试验我对java有了更深入的了解,熟悉了java有些语句的基本用法和java编程的一般过程,增加了java编程的兴趣,深刻体会到动手的重要性以及同学之间的交流的重要性。
11
因篇幅问题不能全部显示,请点此查看更多更全内容