Java第三次作业

Java作业

(一)学习总结

1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明。
封装性是面向对象的一大特性,所谓的封装性就是指对外部不可见。
实现封装:
Private 属性类型 属性名称 进行封装,用set设置,用get获得。
例如:

private String year;
	private String month;
	private String day;
	public Data(){}          //无参构造方法
	public Data(String year,String month,String  day){
		this.year=year;this.month=month;
		this.day=day;
	}
	public String getYear(){
		return year;
	}
	public void setYear(String year){
		this.year=year;
	}
	public String getMonth(){
		return month;
	}
	public void setMonth(String month){
		this.month=month;
	}
	public String getDay(){
		return day;
	}
	public void setDay(String day){
		this.day=day;
	}

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属性被private封装了,无法访问,需要用get方法获取。而且也不可以a.getSecret++,因为a.getSecre不是自变量
可修改为

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

(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为非静态变量,想要在method方法中进行静态应用x就必须把x设置为静变量,static int x = 50;

3 . 使用类的静态变量和构造方法,可以跟踪某个类创建的对象个数。声明一个图书类,数据成员为编号,书名,书价,并拥有静态数据成员册数记录图书的总数。
图书编号从1000开始,每产生一个对象,则编号自动递增(利用静态变量和构造方法实现)。下面给出了测试类代码和Book类的部分代码,将代码补充完整。

class Book{
	int bookId;
	String bookName;
	double price;   
	static int number;                 // 声明静态变量
	static{                            //定义静态代码块对静态变量初始化
		number=1000;                   //代码块只能用一次
	}
	public Book(){                        //无参构造方法
    }
    public Book(int bookId,String bookName, double price){
    	this.bookId= bookId;
    	this.bookName=bookName;
    	this.price=price;
    	number++;
    }
    public int getBookId() {
        return bookId;
     }
     public void setBookIde(int bookId) {
         this.bookId = 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 number;
     }
     public String toString(){
    	 return "编号,书名,书价分别为"+this.bookId+"	"+this.bookName+"	"+this.price;           //重写toString方法
     }
}
public class Test{
	public static void main(String args[]){ 
		Book[] books = {
                       new Book(29,"c语言程序设计",3),
  
                       new Book(25,"数据库原理",30),
 
                       new Book(58,"Java学习笔记",68)};
 
        System.out.println("图书总数为:"+ Book.totalBook());        //Book为类

        for(Book book:books){
    
        System.out.println(book.toString());
        }
    }   
}

4.什么是单例设计模式?它具有什么特点?用单例设计模式设计一个太阳类Sun。
单例设计模式是一种常用的软件设计模式。在它的核心结构中包含一个被称为单例的特殊性类。通过单例模式可以保证体统中一个类只有一个实例。
单例设计模式特点:1、确保只有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。

public class Sun{
	private Sun(){}
	private static Sun a=null;    //静态方法
	public static Sun getInstance(){
		if(a==null){
			a=new Sun();
		}
		return a;
	}
}

5.理解Java参数传递机制,阅读下面的程序,运行结果是什么?说明理由。

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”.原因为str传过去的只是内容,在change中的hello不会改变test中的str,所以输出的是你好。而数组作为参数传递的是地址,所以会更改为大写。

(二)实验总结

实验内容:

1.按照下列要求完成类的设计
(1)设计一个日期类,用于记录年、月、日,提供对日期处理的常用方法(日期输出格式xxxx-xx-xx)。

(2)设计一个职工类,该职工类至少具有下面的属性:职工号,姓名,性别,生日,工作部门,参加工作时间,设计相应的方法。

(3)设计一个部门类,包括下列属性:部门编号,部门名称,经理,设计相应方法。

(4)设计一个测试类,采用对象数组模拟一个拥有两个部门,10个职工的单位,实现对相关信息的查询功能。
2.设计一个计算工具类,
要求:

(1)为用户提供几个常见的几何体面积和体积的算法(如球的体积和表面积,圆柱体的体积和表面积,圆锥体的体积和表面积)(可以学习使用static关键字)

(2)设计一个测试类,给出几个不同的圆柱体,圆锥体,球体的尺寸,用计算工具类分别求它们体积的累加和与表面积的累加和。

(3)设计一个测试类,随机产生球,圆柱、圆锥体的尺寸,模拟考试,要求用户回答它们的体积和面积,并判断用户的回答是否正确

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

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

1.按照下列要求完成类的设计

程序设计思路:职工类会调用到日期类,test类中用户进行查询,可输入姓名,部门,或显示全部,对应的输出。

问题1:Scanner处有错误

原因:在Test类中没有写主函数

解决方案:加上主函数
2.设计一个计算工具类
程序设计思路:在第一个类中设置两个属性分别为体积和面积,然后再写三个有参的构造函数,即为构造参数的重载。在第二个测试类中产生随机数作为参数传给第一个类,然后用用户输入的值与类中返回的值进行比较。
问题1:用户输入的正确,而程序判断则为错误。

原因:double类小数点后为数不确定,所以用户输入的与系统算出来的小数后有差别。

解决方案:

 if((int)a1==(int)qiu.getV()){
	    	System.out.println("用户你输入的体积正确");
	    }

3.用面向对象编程思想完成评分系统
程序设计思路:在第一个类中设置编号,姓名,得分和最后得分,得分是一组数可以通过传递数组地址实现,test类中输出可以通过调用前面类中的toString()方法,和其他方法来实现。
问题1:无法get获得数组。
原因:int[]不可以转化为int。
解决方案:

public int[] getPscore(){
		return pscore;
	}

(三)代码托管(务必链接到你的项目)
https://git.oschina.net/hebau_cs15/java-cs01lxy.git
码云commit历史截图

上传实验项目代码到码云,在码云项目中选择“统计-commits”,设置搜索时间段,搜索本周提交历史,并截图。

(四)学习进度条

代码行数(新增/累积) 学习时间(新增/累积) 本周学习内容
目标 5000行 300小时
第2-4周 350/350 30/30 学习了scanner类还有随机数
第5周 150 50/50 string类和构造方法的使用
第6周 200 50/50 学习了封装,get set 方法,还有类与类之间的调用和连接
原文地址:https://www.cnblogs.com/6770675746-yan/p/6671255.html