Java第三次作业 1502 马 帅

《Java技术》第三次作业

(一)学习总结

1.书中对面向对象封装性的定义为:指把对象的属性和行为看成一个密不可分的整体,把不需要让外界知道的信息隐蔽起来。简单来说,就是定义的一些对象,只有在本类中才可以使用,在外界是不可以访问和调用的。
Java中通过使用private和public声明来区别私有和公由,例如:

class setting{
	private int a=1;
	public int b=1;
}
public class Test {
	public static void main(String[] args){
	setting get;
	int c,d;
	c=get.a;
	d=get.b;
	}
}

这段代码是不能通过编译的,会提示“a不可视”,即"a"不能被调用:

2.阅读下面程序

(1)如代码:

class A{
    private int secret = 5;
}
public class Test{
    public static void main(String args[]){
        A a = new A();
        System.out.println(a.secret++);
    }
}

此段代码不能通过编译,提示“A.secret不可视”,因为封装性的缘故,在Test类的main()方法中是不能调用".secret"的。

(2)如代码:

public class Test{
    int x = 50;
    static int y = 200;
    public static void method(){
        System.out.println(x+y);
    }
    public static void main(String args[]){
        Test.method();
    }
}

此段代码不能通过编译,因为"x"为非静态变量,不能对非静态变量进行静态引用。

3.修改后的代码如下:

class Book{
    static int bookId;
    String bookName;
    double price;
    
    // 声明静态 变量
    static int count;
    
    //定义静态代码块对静态变量初始化
    static {
    	count=0;
        bookId=1000;
    }
                     
    //构造方法
    public Book(){}
    public Book(String bookName,double price) {
        this.bookName=bookName;
        this.price=price;
        count++;
    }  
    public int getBookId(){
    	return ++bookId;
    }
    
    public String getBookName() {
        return bookName;
    }
    public void setBookName(String bookName) {
        this.bookName = bookName;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    
    //定义方法求图书总册数
    public static int totalBook(){
    	return count;
    }
    //重写toString方法
    public String toString(){
    	return "书名为:"+getBookName()+"图书编号为:"+getBookId()+",价格为:"+getPrice();
    }
}
public class Test{
    public static void main(String args[]){ 
        Book[] books = {new Book("c语言程序设计",29.3),
                        new Book("数据库原理",30),
                        new Book("Java学习笔记",68)};
        System.out.println("图书总数为:"+ Book.totalBook()); 
        for(Book book:books){
            System.out.println(book.toString());
        }
    }   
}

4. 单例设计模式只能有自己创建的唯一一个实例,并且必须给所有其他对象提供这一实例。

class Sun{
    private static Sun instance = new Sun() ;
    private Sun(){}
    public static Sun getInstance(){
	return instance ;
    }
}

5.如下代码:

public class Test {
    String str = new String("你好  ");
    char[] ch = { 'w','o','l','l','d' };
    public static void main(String args[]) {
        Test test = new Test();
        test.change(test.str, test.ch);
        System.out.print(test.str);
        System.out.print(test.ch);
    }
    public void change(String str, char ch[]) {
        str = "hello";
        ch[0] = 'W';
    }
}

运行结果为:“你好 Wolld”
为什么不为“hello Wolld”呢?原因很简单,通过调用传参,传递的为str字符串和ch[]字符数组的地址,所以修改字符数组,即为修改内容;而修改的字符串内容,可以理解为是在修改形参,并不影响实参的值,因为传递的是内容而不是地址。
6.使用构造方法后,我觉得很多的程序变的更加清晰,即使出错也可以很快地确认错误的位置,十分方便。还有就是感觉前边的知识不能忘啊,例如比较,比较double数值是十分重要的一个点,用到了很多次。

(二)实验总结

1.按照下列要求完成类的设计
(1)设计一个日期类,用于记录年、月、日,提供对日期处理的常用方法(日期输出格式xxxx-xx-xx)。
(2)设计一个职工类,该职工类至少具有下面的属性:职工号,姓名,性别,生日,工作部门,参加工作时间,设计相应的方法。
(3)设计一个部门类,包括下列属性:部门编号,部门名称,经理,设计相应方法。
(4)设计一个测试类,采用对象数组模拟一个拥有两个部门,10个职工的单位,实现对相关信息的查询功能。

  • 程序设计思路:
    (1)日期类:用set和get方法记录年月日即可;
    (2)职工类:用set和get方法记录职工号、姓名、性别,并用Date(日期类)定义生日和工作时间,用Department(部门类)定义所属部门;
    (3)部门类:用set和get方法记录部门编号、部门名称,并用Employee(职工类)定义经理;
    (4)测试类:输入数据并输出。

2.设计一个计算工具类,要求:
(1)为用户提供几个常见的几何体面积和体积的算法(如球的体积和表面积,圆柱体的体积和表面积,圆锥体的体积和表面积)(可以学习使用static关键字)
(2)设计一个测试类,给出几个不同的圆柱体,圆锥体,球体的尺寸,用计算工具类分别求它们体积的累加和与表面积的累加和。
(3)设计一个测试类,随机产生球,圆柱、圆锥体的尺寸,模拟考试,要求用户回答它们的体积和面积,并判断用户的回答是否正确

  • 程序设计思路:
    (1)输入类:将半径、高、母线长等参数输入;
    (2)计算类:定义π的值为3.14,调用输入类中的参数,对所有公式进行计算;
    (3)测试类:分两个部分。第一个部分,输入参数存入输入类,调用计算类中的公式进行计算;第二个部分,使用Random类生成随机数,即对用户出题,让用户输入答案,判断答案是否正确。
  • 实验问题分析:
    问题:在对用户出题时,结果无法判断。
    原因:精度不同。
    解决方案:将两个值四舍五入后判断内容是否一致,就可以进行判断了。

3.用面向对象编程思想完成评分系统

  • 程序设计思路:
    (1)定义各选手的信息变量和分数数组变量,并写出接口,方便用Arrays.sort()进行排序;
    (2)输入各选手的信息,在排序后进行输出。

4.用面向对象编程思想编写猜拳游戏

  • 程序设计思路:
    (1)电脑类:定义电脑的名字,和分数,使用随机数生成电脑的出拳;
    (2)选手类:与电脑类定义相同,只不过在出拳的方法不再使用随机数生成;
    (3)游戏类:分别生成电脑类变量和选手类变量,输出规则,并决定是否开始,使用循环实现多次游戏,并定义变量记录游戏次数,每次游戏结束调用判断方法判断游戏结果,并询问是否继续;
    (4)调用游戏类中的初始化和开始游戏的方法。

(三)代码托管

  • 码云commit历史截图
posted @ 2017-04-06 17:38  Masart  阅读(268)  评论(1编辑  收藏  举报