您的当前位置:首页正文

实验1:对象和类

2020-02-10 来源:年旅网


成绩:

面向对象原理与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

因篇幅问题不能全部显示,请点此查看更多更全内容