第四周作业

本人姓名:邹丰蔚

本人学号201771010138

面向对象程序设计java周学习总结

1、实验目的与要求

(1) 理解用户自定义类的定义

(2) 掌握对象的声明

(3) 学会使用构造函数初始化对象

(4) 使用类属性与方法的使用掌握使用;

(5) 掌握package和import语句的用途

2、实验内容和步骤

实验1 测试以下程序,掌握文件输入输出程序设计技术(文件输入输出,教材61-62).

 第四周作业

结果

 第四周作业

实验2 导入第4章示例程序并测试。

import java.time.*;

public class CalendarTest

{

public static void main(String[] args)

{

LocalDate date=LocalDate.now();

int month=date.getMonthValue();

int today=date.getDayOfMonth();

 

date=date.minusDays(today-1);//Set to start of month

DayOfWeek weekday=date.getDayOfWeek();

int value=weekday.getValue();//1=Monday,...7=Sunday

 

System.out.println("Mon Tue Wed Thu Fri Sat Sun");

for(int i=1;i<value;i++)

System.out.print(" ");

while(date.getMonthValue()==month)

{

System.out.printf("%3d",date.getDayOfMonth());

if(date.getDayOfMonth()==today)

System.out.print("*");

else

System.out.print(" ");

date=date.plusDays(1);

if(date.getDayOfWeek().getValue()==1)System.out.println();

}

if(date.getDayOfWeek().getValue()!=1)System.out.println();

}

}

结果第四周作业

编辑、编译、调试运行程序4-2(教材104页);

结合程序运行结果,掌握类的定义与类对象的用法,并在程序代码中添加类与对象知识应用的注释;

尝试在项目中编辑两个类文件(Employee.java EmployeeTest.java ),编译并运行程序。

参考教材104EmployeeTest.java,设计StudentTest.java,定义Student类,包含name(姓名)、sex(性别)、javascorejava成绩)三个字段,编写程序,从键盘输入学生人数,输入学生信息,并按以下表头输出学生信息表:

  姓名      性别 java成绩

import java.time.*;

 

/**

 * This program tests the Employee class.

 * @version 1.12 2015-05-08

 * @author Cay Horstmann

 */

public class EmployeeTest

{

   public static void main(String[] args)

   {

      // fill the staff array with three Employee objects

      Employee[] staff = new Employee[3];

 

      staff[0] = new Employee("Carl Cracker", 75000, 1987, 12, 15);

      staff[1] = new Employee("Harry Hacker", 50000, 1989, 10, 1);

      staff[2] = new Employee("Tony Tester", 40000, 1990, 3, 15);

 

      // raise everyone's salary by 5%

      for (Employee e : staff)

         e.raiseSalary(5);

 

      // print out information about all Employee objects

      for (Employee e : staff)

         System.out.println("name=" + e.getName() + ",salary=" + e.getSalary() + ",hireDay="

               + e.getHireDay());

   }

}

 

class Employee

{

   private String name;

   private double salary;

   private LocalDate hireDay;

 

   public Employee(String n, double s, int year, int month, int day)

   {

      name = n;

      salary = s;

      hireDay = LocalDate.of(year, month, day);

   }

 

   public String getName()

   {

      return name;

   }

 

   public double getSalary()

   {

      return salary;

   }

 

   public LocalDate getHireDay()

   {

      return hireDay;

   }

 

   public void raiseSalary(double byPercent)

   {

      double raise = salary * byPercent / 100;

      salary += raise;

   }

}

 

结果第四周作业

(试验)学生

import java.time.*;

import java.util.Scanner;

public class StudentTest

{

   public static void main(String[] args)

   {

      // fill the staff array with three Student objects

      Employee[] staff = new Employee[4];

      System.out.println("请输入学生:");

      @SuppressWarnings("resource")

Scanner in = new Scanner(System.in);

      for(int i=0;i<staff.length;i++) {

          staff[i]=new Employee(in.next(),in.next(),in.nextInt());

      }

      System.out.println("name"+" "+"sex"+" "+" "+"javascore");

      for (Employee e : staff)

          System.out.println(e.getName() +"   "+e.getSex()+"        "+e.getJavaScore());

    }

 }

 

 class Employee

 {

    private String name;

    private String sex;

    private int javascore;

 

    public Employee(String n, String s, int m)

    {

       name = n;

       sex = s;

       javascore =m;

    }

 

    public String getName()

    {

       return name;

    }

 

    public String getSex()

    {

       return sex;

    }

 

    public int getJavaScore()

    {

       return javascore;

    }

 

 }

结果第四周作业

 

测试程序2

编辑、编译、调试运行程序4-3(教材116);

结合程序运行结果,理解程序代码,掌握静态域(netxtId)与静态方法(getNextId)的用法,在相关代码后添加注释;

理解Java单元(类)测试的技巧。

/**

 * This program demonstrates static methods.

 * @version 1.01 2004-02-19

 * @author Cay Horstmann

 */

public class StaticTest

{

   public static void main(String[] args)

   {

      // fill the staff array with three Employee objects

      Employee[] staff = new Employee[3];

 

      staff[0] = new Employee("Tom", 40000);

      staff[1] = new Employee("Dick", 60000);

      staff[2] = new Employee("Harry", 65000);

 

      // print out information about all Employee objects

      for (Employee e : staff)

      {

         e.setId();

         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);

   }

}

 

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()

   {

      id = nextId; // set id to next available id

      nextId++;

   }

 

   public static int getNextId()

   {

      return nextId; // returns static field

   }

 

   public static void main(String[] args) // unit test

   {

      Employee e = new Employee("Harry", 50000);

      System.out.println(e.getName() + " " + e.getSalary());

   }

}

结果第四周作业

测试程序3

编辑、编译、调试运行程序4-4(教材121);

结合程序运行结果,理解程序代码,掌握掌握Java方法参数的用法,在相关代码后添加注释;

/**

 * This program demonstrates parameter passing in Java.

 * @version 1.00 2000-01-27

 * @author Cay Horstmann

 */

public class ParamTest

{

   public static void main(String[] args)

   {

      /*

       * Test 1: Methods can't modify numeric parameters

       */

      System.out.println("Testing tripleValue:");

      double percent = 10;

      System.out.println("Before: percent=" + percent);

      tripleValue(percent);

      System.out.println("After: percent=" + percent);

 

      /*

       * Test 2: Methods can change the state of object parameters

       */

      System.out.println("\nTesting tripleSalary:");

      Employee harry = new Employee("Harry", 50000);

      System.out.println("Before: salary=" + harry.getSalary());

      tripleSalary(harry);

      System.out.println("After: salary=" + harry.getSalary());

 

      /*

       * Test 3: Methods can't attach new objects to object parameters

       */

      System.out.println("\nTesting swap:");

      Employee a = new Employee("Alice", 70000);

      Employee b = new Employee("Bob", 60000);

      System.out.println("Before: a=" + a.getName());

      System.out.println("Before: b=" + b.getName());

      swap(a, b);

      System.out.println("After: a=" + a.getName());

      System.out.println("After: b=" + b.getName());

   }

 

   public static void tripleValue(double x) // doesn't work

   {

      x = 3 * x;

      System.out.println("End of method: x=" + x);

   }

 

   public static void tripleSalary(Employee x) // works

   {

      x.raiseSalary(200);

      System.out.println("End of method: salary=" + x.getSalary());

   }

 

   public static void swap(Employee x, Employee y)

   {

      Employee temp = x;

      x = y;

      y = temp;

      System.out.println("End of method: x=" + x.getName());

      System.out.println("End of method: y=" + y.getName());

   }

}

 

class Employee // simplified Employee class

{

   private String name;

   private double salary;

 

   public Employee(String n, double s)

   {

      name = n;

      salary = s;

   }

 

   public String getName()

   {

      return name;

   }

 

   public double getSalary()

   {

      return salary;

   }

 

   public void raiseSalary(double byPercent)

   {

      double raise = salary * byPercent / 100;

      salary += raise;

   }

}

结果第四周作业

 

测试程序4

编辑、编译、调试运行程序4-5(教材129);

结合程序运行结果,理解程序代码,掌握Java用户自定义类的用法,掌握对象构造方法及对象使用方法,在相关代码后添加注释。

import java.util.*;

 

/**

 * This program demonstrates object construction.

 * @version 1.01 2004-02-19

 * @author Cay Horstmann

 */

public class ConstructorTest

{

   public static void main(String[] args)

   {

      // fill the staff array with three Employee objects

      Employee[] staff = new Employee[3];

 

      staff[0] = new Employee("Harry", 40000);

      staff[1] = new Employee(60000);

      staff[2] = new Employee();

 

      // print out information about all Employee objects

      for (Employee e : staff)

         System.out.println("name=" + e.getName() + ",id=" + e.getId() + ",salary="

               + e.getSalary());

   }

}

 

class Employee

{

   private static int nextId;

 

   private int id;

   private String name = ""; // instance field initialization

   private double salary;

  

   // static initialization block

   static

   {

      Random generator = new Random();

      // set nextId to a random number between 0 and 9999

      nextId = generator.nextInt(10000);

   }

 

   // object initialization block

   {

      id = nextId;

      nextId++;

   }

 

   // three overloaded constructors

   public Employee(String n, double s)

   {

      name = n;

      salary = s;

   }

 

   public Employee(double s)

   {

      // calls the Employee(String, double) constructor

      this("Employee #" + nextId, s);

   }

 

   // the default constructor

   public Employee()

   {

      // name initialized to ""--see above

      // salary not explicitly set--initialized to 0

      // id initialized in initialization block

   }

 

   public void Employee1() {

// TODO Auto-generated constructor stub

}

 

public String getName()

   {

      return name;

   }

 

   public double getSalary()

   {

      return salary;

   }

 

   public int getId()

   {

      return id;

   }

}

结果第四周作业

 

测试程序5

编辑、编译、调试运行程序4-64-7(教材135);

结合程序运行结果,理解程序代码,掌握Java包的定义及用法,在相关代码后添加注释;

import static java.lang.System.*;

 

/**

 * This program demonstrates the use of packages.

 * @version 1.11 2004-02-19

 * @author Cay Horstmann

 */

public class PackageTest

{

   public static void main(String[] args)

   {

      // because of the import statement, we don't have to use

      // com.horstmann.corejava.Employee here

      Employee harry = new Employee("Harry Hacker", 50000, 1989, 10, 1);

 

      harry.raiseSalary(5);

 

      // because of the static import statement, we don't have to use System.out here

      out.println("name=" + harry.getName() + ",salary=" + harry.getSalary());

   }

}

结果第四周作业

 

实验3  编写长方形类Rectangle与圆形类Circle,其中Rectangle类设置私有属性:width,length;Circle类设置私有属性radius。编写Rectangle类的带参构造函数Rectangle(int width,int length), Circle类的带参构造函数Circle(int radius),编写两个类的toString方法(Eclipse可自动生成)。上述2个类均定义以下方法

求周长的方法public int getPerimeter()

求面积的方法public int getArea()

main方法中完成以下任务:

(1) 输入1行长与宽,创建一个Rectangle对象;

(2) 输入1行半径,创建一个Circle对象;

(3) 将两个对象的周长加总输出,将两个对象的面积加总输出。

 

import java.util.Scanner;

public class shiyan{

    public static void main(String[] args) {

        // TODO 自动生成的方法存根

        final float PI=3.14f;

        System.out.println("请输入长方形的长:");

        System.out.println("请输入长方形的宽:");

        System.out.println("请输入圆的半径:");

        @SuppressWarnings("resource")

Scanner sc=new Scanner(System.in);

        int a1=sc.nextInt();

        int b1 = sc.nextInt();

        int r = sc.nextInt();

        int area1=a1*b1;

        float area2 = PI*r*r;

        int perimeter1 = (int) (2*(a1+b1));

        float perimeter2= 2*PI*r;

        System.out.println("长方形的面积:"+area1);

        System.out.println("长方形的周长:"+perimeter1);

        System.out.println("圆的面积是:"+area2);

        System.out.println("圆的周长是:"+perimeter2);

    }

 

}

 第四周作业

总结:通过这个周的学习,我认识了什么是类,什么是对象,并了解了对象的三个特征:行为,状态,对象标识。掌握了packageimport语句的用途。也熟悉Math类、String类、math类、Scanner类、LocalDate类的常用API。通过本章的学习我认识到了自己的不足,也学到了很多东西。