cs61B-sp21 | lab6

news2024/11/17 17:48:18

cs61B-sp21 | lab6

TODO 1

在 CapersRepository.java 中

static final File CAPERS_FOLDER = null; 
// TODO Hint: look at the `join`  
//      function in Utils

在 Utils.java 我们找到 join 函数,第一个 join 的作用是将 first 和 others 连接起来形成一个路径,并将其转换为 File 对象返回。而第二个 join 的作用是将 first 对象的路径和 others 连接起来形成一个新的对象并转换为 File 返回。

回到 CAPERS_FOLDER,实际上我们是要创建主工作目录,也就是 ( u s e r . d i r ) / . c a p e r s (user.dir)/.capers (user.dir)/.capers

static final File CAPERS_FOLDER = join(CWD, ".capers");

TODO 2

在 Dog.java 中

public class Dog { // TODO
	...
}

我们需要添加 Serializable 接口

public class Dog implements Serializable

TODO 4

static final File DOG_FOLDER = null; // TODO (hint: look at the `join`  
                                     //      function in Utils)

对于 DOG_FOLDER,我们要在 .capers 下创建 dogs 文件夹

static final File DOG_FOLDER = join(".capers", "dogs");

TODO 5

根据注释,这段代码要执行持久化的操作,也就是创建文件夹或者文件,让数据在程序关闭后仍然存在。

/**  
 * Does required filesystem operations to allow for persistence. 
 * (creates any necessary folders or files) 
 * Remember: recommended structure (you do not have to follow): 
 * * .capers/ -- top level folder for all persistent data in your lab12 folder 
 *    - dogs/ -- folder containing all of the persistent data for dogs 
 *    - story -- file containing the current story 
*/
public static void setupPersistence() {  
    // TODO  
}

创建 .capers 文件夹,以及 .capers/dogs 文件夹。

CAPERS_FOLDER.mkdir();
Dog.DOG_FOLDER.mkdir();

TODO 6

/**  
 * Appends the first non-command argument in args 
 * to a file called `story` in the .capers directory. 
 * @param text String of the text to be appended to the story  
 */
 public static void writeStory(String text) {  
    // TODO  
}

需要先在 .capers 文件夹下创建一个叫做 “story” 的文件,用 join 函数将 .capers 路径和 story 文件名连接。如果该文件存在,说明之前已经写入过字符串,那么提取原来的内容并且与新内容连接。如果该文件不存在,那么文件中内容就是 text。

public static void writeStory(String text) {  
    File f = join(CAPERS_FOLDER, "story");  
    String newStory;  
    if(!f.exists()) {  
        newStory = text;  
    } else {  
        String originStory = readContentsAsString(f);  
        newStory = originStory + '\n' + text;  
    }    writeContents(f, newStory);  
    System.out.println(newStory);  
}

TODO 7

在 Main.java 中的 main 函数

case "dog":  
    validateNumArgs("dog", args, 4);  
    // TODO: make a dog  
    break;

首先,输入的参数为\dog [name] [breed] [age],name 对应 args[1],breed 对应 args[2],age 对应 args[3]。再调用 CapersRepository 中的 makeDog 函数即可。注意 age 需要整型,所以我们要进行类型转换。

case "dog":  
    validateNumArgs("dog", args, 4);  
    String name = args[1];  
    String breed = args[2];  
    int age = Integer.parseInt(args[3]);  
    CapersRepository.makeDog(name, breed, age);  
    break;

TODO 8

需要创建并且保存 dog 并传入它的三个参数,并且需要打印这只狗的信息。

/**  
 * Creates and persistently saves a dog using the first 
 * three non-command arguments of args (name, breed, age). 
 * Also prints out the dog's information using toString(). 
*/
public static void makeDog(String name, String breed, int age) {  
    // TODO  
}

观察 Dog.java


saveDog 用来将 dog 存储至文件中,toString() 返回一个包含狗的信息的字符串。

public static void makeDog(String name, String breed, int age) {  
    Dog newDog = new Dog(name, breed, age);  
    newDog.saveDog();  
    System.out.println(newDog);  
}

TODO 9

/**  
 * Saves a dog to a file for future use. 
*/
public void saveDog() {  
    // TODO (hint: don't forget dog names are unique)  
}

在 Dogs 文件夹下创建这只新狗狗的文件并写入对象。

public void saveDog() {  
    File newDog = join(DOG_FOLDER, name);  
    writeObject(newDog, this);  
}

TODO 10

case "birthday":  
    validateNumArgs("birthday", args, 2);  
    // TODO: celebrate this dog's birthday  
    break;

获取要庆祝生日的小狗名称,也就是 args[1],并且调用 CapersRepository 中的 celebrateBirthday 函数。

case "birthday":  
    validateNumArgs("birthday", args, 2);  
    name = args[1];  
    CapersRepository.celebrateBirthday(name);  
    break;

TODO 11

/**  
 * Advances a dog's age persistently and prints out a celebratory message. 
 * Also prints out the dog's information using toString(). 
 * Chooses dog to advance based on the first non-command argument of args. 
 * @param name String name of the Dog whose birthday we're celebrating.  
 */
 public static void celebrateBirthday(String name) {  
    // TODO  
}

先从文件中获取 Dog,再调用 haveBirthday 函数,最终保存。

public static void celebrateBirthday(String name) {  
    // TODO  
    Dog theDog = Dog.fromFile(name);  
	theDog.haveBirthday();  
	theDog.saveDog();  
}

TODO 12

/**  
 * Reads in and deserializes a dog from a file with name NAME in DOG_FOLDER. 
 * @param name Name of dog to load  
 * @return Dog read from file  
 */
 public static Dog fromFile(String name) {  
    // TODO (hint: look at the Utils file)  
    return null;  
}

先获取文件,再读取里面的对象即可。

public static Dog fromFile(String name) {  
    File f = join(DOG_FOLDER, name);  
    return readObject(f, Dog.class);    
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1710907.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

部署LAMP环境

红帽9搭建LAMP 安装Apache 2.安装数据库服务 3.安装php (1)使用IP访问/phpinfo.php 4.安装phpMyAdmin (1)数据库端口改为学号后五位 (2)登录phpmyadmin 5.SSH增加一个端口10022,fttp增加两个端口10080和8080 &#xf…

使用python绘制一个五颜六色的爱心

使用python绘制一个五颜六色的爱心 介绍效果代码 介绍 使用numpy与matplotlib绘制一个七彩爱心! 效果 代码 import numpy as np import matplotlib.pyplot as plt# Heart shape function def heart_shape(t):x 16 * np.sin(t)**3y 13 * np.cos(t) - 5 * np.cos…

HNU-人工智能-作业3

人工智能-作业3 计科210X 甘晴void 202108010XXX 1.贝叶斯网络 根据图所给出的贝叶斯网络,其中:P(A)0.5,P(B|A)1, P(B|A)0.5, P(C|A)1, P(C|A)0.5,P(D|BC)1,P(D|B, C)0.5&#xff…

链式法则:神经网络前向与反向传播的基石

在深度学习的浪潮中,神经网络以其强大的学习和预测能力,成为解决复杂问题的有力工具。而神经网络之所以能够不断学习和优化,离不开两个核心过程:前向传播和反向传播。其中,链式法则作为微积分学中的一个基本概念&#…

闲鱼电商运营高级课程,一部手机学会闲鱼开店赚钱

课程下载:https://download.csdn.net/download/m0_66047725/89360471 更多资源下载:关注我。 课程内容: 10-9、怎么寻找优质的货源店铺.mp4 11-10、怎么去选择商品图片.mp4 12-11、商品图片的注意避免事项.mp4 13-12、怎么写标题.mp4 …

C++ 基于vs2019创建并使用动态链接库(dll)

库的基本认识 静态库(Static Library) 基本概念:静态库是在编译时链接到目标程序中的库文件。它包含了程序运行所需的所有函数和数据,这些函数和数据会被直接嵌入到最终生成的可执行文件中。静态库通常以.a(在Unix-l…

三步走,Halo DB 安装指引

前文介绍了国产数据库新星 Halo 数据库是什么, 哈喽,国产数据库!Halo DB! ★ HaloDB是基于原生PG打造的新一代高性能安全自主可控全场景通用型统一数据库。 业内首次创造性的提出插件式内核架构设计,通过配置的方式,适…

美光拟投巨资在日本广岛建DRAM厂,目标2027年底投产

美光科技(Micron Technology)据日本媒体报道,计划在日本广岛县新建一座DRAM芯片生产工厂,目标最快于2027年底投入运营。这一举措标志着美光在增强其内存芯片生产能力方面的又一重大步伐。 报道称,新工厂的总投资规模预…

【CALayer-CALayer的基本属性 Objective-C语言】

一、接下来,我们来说这个Layer啊, 1.首先,Layer能接触到的,就是我们之前说截图啊,就是我们self.view里面,有一个layer属性, [self.view.layer renderInContext:(CGContextRef t)]; 那个里面,有一个layer属性,然后呢,是CALayer类型的, 接下来,我们就来学习一…

union all 以及标量子查询执行计划

SELECT 1, (SELECT ID1 FROM TE WHERE IDA.ID2) FROM .TA A WHERE COLA X UNION ALL SELECT 1, (SELECT ID2 FROM TD WHERE IDA.ID1) FROM .TB A WHERE COLA X UNION ALL SELECT 1,COL2 AS PARENT_UUID FROM .TC a WHERE COLA X 三个union all 看着像是5个table joi…

做好开源快速开发平台研发创新 助力行业高效发展!

随着信息化时代的到来,科技的力量无处不在。为了提高办公效率,很多大中型企业倾向于使用更为先进的软件平台来助力企业降本增效。在众多助力神器之中,开源快速开发平台低代码技术平台深得广大新老客户朋友的喜爱,它与生俱来的优势…

Python中Web开发-Django框架

大家好,本文将带领大家进入 Django 的世界,探索其强大的功能和灵活的开发模式。我们将从基础概念开始,逐步深入,了解 Django 如何帮助开发人员快速构建现代化的 Web 应用,并探讨一些最佳实践和高级技术。无论是初学者还…

APM2.8内置罗盘校准

如果你有外置罗盘,可以不用校准内置罗盘,可以忽略此文。推荐使用外置罗盘,内置罗盘容易受干扰。 使用内置罗盘需要插入飞控GPS接口旁边的跳线帽。如图: 如果要使用内置罗盘,而又加了GPS的,记得一定要把GPS…

手机性能过剩?三年前的改名芯片卡顿明显,中端机太弱鸡了

业界人士都喜欢说手机的性能已经严重过剩,笔者近期从运营商购买了两款手机,搭载的芯片是联发科的改名芯片,以及高通的低端芯片,使用中明显卡顿,显示出这些改名芯片的性能早已落后于时代。 其中一款为OPPO A2&#xff0…

【Mybatis】映射文件中获取参数的符号#{}和${}的区别

在xml映射文件中获取参数的符号都是用的#{}的方式,其实Mybatis还支持另一种符号来接收传递过来的参数值,就是${},他们是区别就在与底层使用jdbc的statement不一样 #{}对应的是PreparedStatementd对象来执行sql语句 ${}对应的是Statement对象…

【TCP协议中104解析】wireshark抓取流量包工具,群殴协议解析基础

Tcp ,104 ,wireshark工具进行解析 IEC104 是用于监控和诊断工业控制网络的一种标准,而 Wireshark则是一款常用的网络协议分析工具,可以用干解析TEC104 报文。本文将介绍如何使用 Wireshark解析 IEC104报文,以及解析过 程中的注意事项。 一、安…

Revit——(2)模型的编辑、轴网和标高

目录 一、关闭缩小的隐藏窗口 二、标高(可创建平面,其他标高线复制即可) 三、轴网 周围的四个圈和三角表示四个里面,可以移动,不要删除 一、关闭缩小的隐藏窗口 二、标高(可创建平面,其他标…

JDK9-21新特性概览(持续更新)

JDK9-21新特性概览 一、JDK9新特性1.1 JEP 102: Process API Updates简介案例风险 1.2 JEP 193: Variable Handles简介案例风险 1.3 JEP 200: The Modular JDK简介案例风险 1.4 JEP 213: Milling Project Coin简介案例1.1 try-with-resources增强1.2 接口中私有方法 1.5 JEP 22…

Sentinel-2 哨兵二号数据介绍及下载

1 Sentinel-2简介 SENTINEL-2 is a European wide-swath, high-resolution, multi-spectral imaging mission. Sentinel-2 是高分辨率多光谱成像卫星,一颗卫星的重访周期为10天,两颗互补,重访周期为5天。分为2A和2B两颗卫星。2A于2015年6月…

【Mybatis】映射文件中获取参数的类型是集合或数组处理

基本数据类型的参数或者对象作为参数的情况,在Mybatis还有一些特殊处理的参数类型要特别注意:如果参数类型是集合Collection(List,Set)或者是数组,Mybatis也会把这些类型的参数封装在一个Map对象中传递到xm…