《面向对象程序设计(Java)》
 实验报告实验2: 类的设计和对象的创建、成员变量和成员方法的设计
一、实验类型
 设计性实验
 二、实验目的
 1、掌握各种流程控制语句
 2、熟练应用数组的定义和使用
 3、OOP实例的调试与运行三、实验内容及步骤
 一、流程控制语句
 Java程序的流程控制语句用于控制程序中各个语句的执行顺序。
 包括:选择语句、循环语句、跳转语句
 1、选择语句包括:if 语句和swith语句
 实例1:给出3个整型数,找出最大的数。
 public class Ul{
 public static void main(String argsJ){
 int max,a=4,b=3,c=7;
 /具体程序内容由学生完成
 System.out.println(a+““+b+”“+c);/如果改为(a+b+e)结果如何?
 System.out.println(“max=”+max);实例2:根据变量score中存放的考试分数,输出对应的等级。
 60分以下为D等;6069为C等;7089为B等;90~100为A等。
 public class U2{
 public static void main(String argsJ){
 int score=55;switch(score/10){
 case 0:case 1:case 2:case 3:case 4:case 5:System.out.println(score+"分是D等”);break;
 //去掉break 结果有何变化?
 case 6:System.out.println(score+“分是C等”);break;case 7:
 case 8:System.out.println(score+“分是B等”);break;case 9:
 case 10:System.out.println(score+“分是A等”);break;default:System.outprintln(“数据错误”;
 }}}
 2、循环语句
 实例3:计算1+2+…+100的结果。
 程序自己编写
 3、计算并输出n的阶乘(设n=10)。
 程序自己编写
 4、编写程序,输出1~l00间的所有奇数。
 提示:满足表达式(i9%2l-0)的i值为奇数
 二、数组的定义和使用
 实例:4,二维数组的定义和使用
 public class Shuzul(
 public static void main(String args[])throws Java.io.IOException{
 char ch[][]=new char[4][4];System.out.println(“输入16个字母,输入b跳出”;labl:
 for(int i=0;i<4;i++)for(int j=0:j<4j++){
 ch[i]i]=(char)System.in.readO;System.in.skip(2);
 /输入一个字母回车一次,回车不会被认做字母赋给数组
 if(chf[i][j]==b)
 break labl;/∥去掉该处和第5行的labl,结果又会如何?
 }
 for(inti=0;i<4;i++)/∥用于输出数组ch for(intj=0:j<4j++)
 System.out.print(ch[i][i]+””);/"M“用于分隔每个数组元素System.out.println("跳出”;思考:去掉第5行和第12行的labl,结果又会如何?为什么会这样?
 三、OOP实例的调试与运行(2) 题目从上机练习系统中选取
 (3) 每道题都需要“类描述图”
 (4) 每道题都需要实验过程和结果的屏幕截图
 第1题(上机练习系统第46题 )
 第46题 填写代码. Point类例子(1)(10分)
 下面程序是Point类的基本操作例子.
 请将下面程序的【代码】替换为Java程序代码,使程序运行正确。
 文件Main.javaimport java.util.Scanner;
 public class Main {
 public static void main(String args[]) {
 // TODO Auto-generated method stub
 Scanner in = new Scanner(System.in);
 int n = in.nextInt();
 Point pt = 【代码1】 Point(1, n);// 创建对象
 System.out.println(“pt.x=” + 【代码2】.x);// 取
 pt.x = 5;// 修改
 System.out.println(“pt.x=” + pt.x);
 pt.move(3, 3);// 移动
 System.out.println(“pt.x=” + pt.x);
 System.out.println(“pt.y=” + pt.y);
 【代码3】 pt2 = new Point();// 声明对象并new
 System.out.println(“pt2.x=” + pt2.x);
 pt2 = new Point(9, 2);
 System.out.println(“pt2.x=” + pt2.x);
 }
 }
 class Point {
 int x, y;// 成员变量,属性
 【代码4】 Point() {// 无参构造方法
 x = 0;
 y = 0;
 }
 public Point(int ix, int 【代码5】) {// 有参构造方法
 x = ix;
 y = iy;
 }
 【代码6】 move(int ix, int iy) {// 方法
 x += ix;// x=x+ix
 y += iy;
 }
 }此题的上机步骤是:
1. 建立一个Java项目,名称可以按题号取名;
2. 建立一个类, 类的名称为Main。这一点非常重要;
3. 将上面所有代码都复制到类Main中;
4. 填代码;
5. 提交代码,注意题号要一致。
 解答
 import java.util.Scanner;
 public class Main {
 public static void main(String args[]) {
 // TODO Auto-generated method stub
 Scanner in = new Scanner(System.in);
 int n = in.nextInt();
 Point pt = new Point(1, n);// 创建对象
 System.out.println(“pt.x=” + pt.x);// 取
 pt.x = 5;// 修改
 System.out.println(“pt.x=” + pt.x);
 pt.move(3, 3);// 移动
 System.out.println(“pt.x=” + pt.x);
 System.out.println(“pt.y=” + pt.y);
 Point pt2 = new Point();// 声明对象并new
 System.out.println(“pt2.x=” + pt2.x);
 pt2 = new Point(9, 2);
 System.out.println(“pt2.x=” + pt2.x);
 }
 }
 class Point {
 int x, y;// 成员变量,属性
 Point() {// 无参构造方法
 x = 0;
 y = 0;
 }
 public Point(int ix, int iy) {// 有参构造方法
 x = ix;
 y = iy;
 }
 void move(int ix, int iy) {// 方法
 x += ix;// x=x+ix
 y += iy;
 }
 }第2题(上机练习系统第47题 )
 public class Main {
 public static void main (String args[ ]) {
 【代码1】//命令行窗口输出"教学活动从教室开始"
 Teacher zhang = new Teacher();
 Student jiang = 【代码2】Student();//创建对象
 zhang.introduceSelf();
 jiang.【代码2】; //调用它的方法
 }
 }
 class Teacher {
 void introduceSelf() {
 【代码3】 //命令行窗口输出"我是李老师"
 }
 }
 class Student {
 void introduceSelf() {
 【代码4】/ /命令行窗口输出"我是学生,名字是:奖励"
 }
 }此题的上机步骤是:
1. 建立一个Java项目,名称可以按题号取名;
2. 建立一个类, 类的名称为Main。这一点非常重要;
3. 填代码;
4. 提交代码,注意题号要一致。
解答:
 public class Main {
 public static void main (String args[ ]) {
 System.out.println(“教学活动从教室开始”);//命令行窗口输出"教学活动从教室开始"
 Teacher zhang = new Teacher();
 Student jiang = new Student();//创建对象
 zhang.introduceSelf();
 jiang.introduceSelf(); //调用它的方法
 }
 }
 class Teacher {
 void introduceSelf() {
 System.out.println(“我是李老师”); //命令行窗口输出"我是李老师"
 }
 }class Student {
 void introduceSelf() {
 System.out.println(“我是学生,名字是:奖励”);//命令行窗口输出"我是学生,名字是:奖励"
 } 
 }第3题(上机练习系统第48题 )
 第48题 填写代码. 关于Point类的操作(2)(10分)
 下面程序构造一个类来描述屏幕上的一个点,该类的构成包括点的 x 和 y 两个坐标,以及一些对点 进行的操作,包括:取得点的坐标值,对点的坐标进行赋值,编写应用程序生成该类的对象并 对其进行操作。
 请将下面程序的【代码】替换为Java程序代码,使程序运行正确。
 文件Main.java
 public class Main {public static void main(String[] args) {
 Point Point1 = new Point(3, 4);
 System.out.println(“Point1:” + “(” +
 Point1.x + “,” + Point1.y + “)”);Point Point2 = Point1.getPoint();
 System.out.println(“Point2:” + “(” +
 Point2.x + “,” + Point2.y + “)”);Point 【代码1】 = new Point(5, 6);
 Point1.setPoint(Point3);
 System.out.println(“Point1:” + “(” +
 Point1.x + “,” + Point1.y + “)”);
 }
 }class Point {
 int x, y;public Point(int x, 【代码2】) {
 this.x = x;
 this.y = y;
 }【代码3】 Point getPoint() {
 Point tempPoint = new Point(x, y);
 return tempPoint;
 }public void setPoint(Point point) {
 this.x = point.x;
 【代码4】y = point.y;
 }}
此题的上机步骤是:
1. 建立一个Java项目,名称可以按题号取名;
2. 建立一个类, 类的名称为Main。这一点非常重要;
3. 填代码;
4. 提交代码,注意题号要一致。
 解答:
 public class Main {
public static void main(String[] args) {
 Point Point1 = new Point(3, 4);
 System.out.println(“Point1:” + “(” +
 Point1.x + “,” + Point1.y + “)”);Point Point2 = Point1.getPoint();
 System.out.println(“Point2:” + “(” +
 Point2.x + “,” + Point2.y + “)”);Point Point3 = new Point(5, 6);
 Point1.setPoint(Point3);
 System.out.println(“Point1:” + “(” +
 Point1.x + “,” + Point1.y + “)”);
 }
 }class Point {
 int x, y;public Point(int x, int y) {
 this.x = x;
 this.y = y;
 }public Point getPoint() {
 Point tempPoint = new Point(x, y);
 return tempPoint;
 }public void setPoint(Point point) {
 this.x = point.x;
 this.y = point.y;
 }}
第4题(上机练习系统第49题 )
 第49题 填写代码. 关于Point类的操作(3)(10分)
 下面程序构造一个类来描述屏幕上的一个点,该类的构成包括点的 x 和 y 两个坐标,以及一些对点 进行的操作,包括:取得点的坐标值,对点的坐标进行赋值,编写应用程序生成该类的对象并 对其进行操作。
 请将下面程序的【代码】替换为Java程序代码,使程序运行正确。
 文件Main.javapublic class Main {
public static void main(String[] args) {
 // TODO Auto-generated method stub
 Point origin = new 【代码1】(10, 10);
 origin.getPoint();
 【代码2】.setPoint(20, 20);
 origin.getPoint();
 }}
class Point {
 private int x;
 private int y;public Point(int x, int y) {
 this.x = x;
 【代码3】y = y;
 }public void setPoint(int x1, int y1) {
 x = x1;
 y = y1;
 }public void getPoint() {
 System.out.println("Point x: " + x + ",y: " + y);
 }}
此题的上机步骤是:
1. 建立一个Java项目,名称可以按题号取名;
2. 建立一个类, 类的名称为Main。这一点非常重要;
3. 填代码;
4. 提交代码,注意题号要一致。
 解答:
 public class Main {
public static void main(String[] args) {
 // TODO Auto-generated method stub
 Point origin = new Point(10, 10);
 origin.getPoint();
 origin.setPoint(20, 20);
 origin.getPoint();
 }}
class Point {
 private int x;
 private int y;public Point(int x, int y) {
 this.x = x;
 this.y = y;
 }public void setPoint(int x1, int y1) {
 x = x1;
 y = y1;
 }public void getPoint() {
 System.out.println("Point x: " + x + ",y: " + y);
 }}
第5题(上机练习系统第50题 )
第50题 编写部分代码. 按面向对象要求编程在Employee加入身份证(10分)下面程序在Employee类中加入身份证信息,但类Employee中部分代码缺失.请编写程序代码,使程序运行正确。
 具体要求, 修改Employee中5个参数的构造器为6个参数的构造器;缺少一个名称为getID()的方法.需要加入.此题的上机步骤是:
1. 建立一个Java项目,名称可以按题号取名;
2. 建立一个类, 类的名称为Main。这一点非常重要;
3. 将题中代码复制到Main.java中;
4. 按要求编写代码,请注意已经有的代码不能修改,特别是class Main类中的代码不能修改;
5. 提交代码,注意题号要一致。
文件Main.java
import java.util.*;
 public class Main {
 public static void main(String args[]) {
 Scanner reader = new Scanner(System.in);
 String name=reader.nextLine();
 String ID=reader.nextLine();
 int salary= reader.nextInt();
 int year = reader.nextInt();
 int month=reader.nextInt();
 int day=reader.nextInt();
 Employee e = new Employee(name,ID,salary,year,month,day);
 e.raiseSalary(5);
 System.out.println(“姓名:”+e. getName()+ " 身份证:" +e.getID()+" 工资:"+ e.getSalary());
 System.out.println(“The Main class is end.”);
 }
 }class Employee {
 private String name;//私有域,姓名
 private String ID;//私有域,身份证
 private double salary;//私有域,工资
 private Date hireDay; //私有域,录用日期
 //构造方法
 public Employee(String n, double s, int year, int month, int day)
 {
 name = n;//参数,(局部)变量
 salary = s;//参数, (局部)变量
 GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
 // GregorianCalendar uses 0 for January(1月份是0)
 hireDay = calendar.getTime();
 }public String getName() {
 return name;
 }
 public double getSalary() {
 return salary;
 }
 public Date getHireDay() {
 return hireDay;
 }
 //"涨工资"计算
 public void raiseSalary(double byPercent)
 {
 double raise = salary * byPercent / 100;
 salary += raise;
 }}
输入:
 姓名
 身份证
 工资
 以空格分隔的日期,形式为YYYY MM DD
 输出:
 姓名:xxx 身份证:yyyyy 工资:d 这里xxx和yyyyy是字符串,d是double数
 The Main class is end.样例输入:
 Romeo
 430502199807101121
 50000
 2014 7 11
 样例输出:
 姓名:Romeo 身份证:430502199807101121 工资:52500.0
 The Main class is end.
 解答:
 import java.util.*;
 public class Main {
 public static void main(String args[]) {
 Scanner reader = new Scanner(System.in);
 String name=reader.nextLine();
 String ID=reader.nextLine();
 int salary= reader.nextInt();
 int year = reader.nextInt();
 int month=reader.nextInt();
 int day=reader.nextInt();
 Employee e = new Employee(name,ID,salary,year,month,day);
 e.raiseSalary(5);
 System.out.println(“姓名:”+e. getName()+ " 身份证:" +e.getID()+" 工资:"+ e.getSalary());
 System.out.println(“The Main class is end.”);
 }
 }class Employee {
 private String name;//私有域,姓名
 private String ID;//私有域,身份证
 private double salary;//私有域,工资
 private Date hireDay; //私有域,录用日期
 //构造方法
 public Employee(String n, String i, double s, int year, int month, int day)
 {
 name = n;//参数,(局部)变量
 ID = i;
 salary = s;//参数, (局部)变量
 GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
 // GregorianCalendar uses 0 for January(1月份是0)
 hireDay = calendar.getTime();
 }public String getName() {
 return name;
 }
 public String getID() {
 return ID;
 }
 public double getSalary() {
 return salary;
 }
 public Date getHireDay() {
 return hireDay;
 }
 //"涨工资"计算
 public void raiseSalary(double byPercent)
 {
 double raise = salary * byPercent / 100;
 salary += raise;
 }}
第6题(上机练习系统第51题 )
第51题 代码填空. 通过类完成加法运算(10分)此题的上机步骤是:
1. 建立一个Java项目,名称可以按题号取名;
2. 建立一个类, 类的名称为Main。这一点非常重要;
3. 将题目中代码复制,然后填代码;
4. 提交代码,注意题号要一致。
下列Java应用程序是用户从键盘输入个人信息,然后程序将个人信息输出。
 请按程序实现要求,将下面程序的【代码】替换为Java程序代码。
 文件Main.javaimport java.util.Scanner;
 public class Main {
 public 【代码1】 void main(String[] args) {
 System.out.println(【代码2】.add(5));//显示5+2的结果
 Scanner reader=new Scanner(System.in);
 double y=reader.nextDouble();
 System.out.println(Plus.add(y));//显示1+y的结果
 Plus aPlus=new Plus(3,4);
 System.out.println(【代码3】.add());//显示3+4的结果
 }
 }
 class Plus{
 static int a=1,b=2;//域
 int x,y;
 public Plus() {
 x=0;y=0;
 }
 public Plus(int x, int y) {
 【代码4】.x = x;
 this.y = y;
 }
 public static int add(int x){
 return(x+b);
 }
 public 【代码5】 add(){
 return(x+y);
 }
 public static double add(【代码6】 y){
 return(a+y);
 }
 【代码7】 add(int x,int y){
 return (x+y);
 }
 }
 解答:
 import java.util.Scanner;
 public class di51ti {
 public static void main(String[] args) {
 System.out.println(Plus.add(5));//显示5+2的结果
 Scanner reader=new Scanner(System.in);
 double y=reader.nextDouble();
 System.out.println(Plus.add(y));//显示1+y的结果
 Plus aPlus=new Plus(3,4);
 System.out.println(aPlus.add());//显示3+4的结果
 }
 }
 class Plus{
 static int a=1,b=2;//域
 int x,y;
 public Plus() {
 x=0;y=0;
 }
 public Plus(int x, int y) {
 this.x = x;
 this.y = y;
 }
 public static int add(int x){
 return(x+b);
 }
 public int add(){
 return(x+y);
 }
 public static double add(double y){
 return(a+y);
 }
 public static int add(int x,int y){
 return (x+y);
 }
 }第7题(上机练习系统第52题 )
第52题 填写代码,以Employee类为例的静态域和静态方法(10分)以下程序是有关静态域和静态方法的例子,请将下面程序的【代码】替换为Java程序代码,使程序运行正确。
 文件Main.javaimport java.util.Scanner;
 public class Main
 {
 public static void main(String[] args)
 {
 Employee[] staff = new Employee[3];staff[0] = new Employee("Tom", 40000);
  staff[1] = new Employee("Dick", 60000);
  staff[2] = new Employee("Harry", 65000);
  Scanner reader=new Scanner(System.in);
  for (【代码1】 e: staff)
  {
int n=reader.nextInt();
e.setId(n);
System.out.println("name=" + e.getName() + ",id=" + e.getId() + ",salary="
           + e.getSalary());
  }
  int n = 【代码2】.getNextId(); // calls static method
  System.out.println("Next available id=" + n);
  System.out.println("The Main class is end.");}
 }
 class Employee
 {
 private 【代码3】 int nextId = 1;
 private String name;
 private double salary;
 private int id;
 public Employee(String n, double s)
 {
 name = n;
 salary = s;
 id = 0;
 }
 public String getName()
 {
 return name;
 }
 public double getSalary()
 {
 return salary;
 }
 public int getId()
 {
 return id;
 }
 public void setId(int 【代码4】)
 {
 id = nextId; // set id to next available id
 nextId+=n;
 }
 public 【代码5】 int getNextId() //静态方法
 {
 return nextId; // returns static field
 }
 }输入:
 n个数
 输出:
 按程序运行结果
 The Main class is end.样例输入:
 3 4 6
 样例输出:
 name=Tom,id=1,salary=40000.0
 name=Dick,id=4,salary=60000.0
 name=Harry,id=8,salary=65000.0
 Next available id=14
 The Main class is end.解答:
 import java.util.Scanner;
 public class Main
 {
 public static void main(String[] args)
 {
 Employee[] staff = new Employee[3];staff[0] = new Employee("Tom", 40000);
  staff[1] = new Employee("Dick", 60000);
  staff[2] = new Employee("Harry", 65000);
  Scanner reader=new Scanner(System.in);
  for (Employee e: staff)
  {
	int n=reader.nextInt();
	e.setId(n);
	System.out.println("name=" + e.getName() + ",id=" + e.getId() + ",salary="
           + e.getSalary());
  }
  int n = Employee.getNextId(); // calls static method
  System.out.println("Next available id=" + n);
  System.out.println("The Main class is end.");}
 }
 class Employee
 {
 private static int nextId = 1;
 private String name;
 private double salary;
 private int id;
 public Employee(String n, double s)
 {
 name = n;
 salary = s;
 id = 0;
 }
 public String getName()
 {
 return name;
 }
 public double getSalary()
 {
 return salary;
 }
 public int getId()
 {
 return id;
 }
 public void setId(int n)
 {
 id = nextId; // set id to next available id
 nextId+=n;
 }
 public static int getNextId() //静态方法
 {
 return nextId; // returns static field
 }
 }