6.认识Java的API 使用Java函数库

news2025/1/11 20:50:17

2.1 分析bug

SimpleDotCom类中的checkYourself()方法中的for循环有问题

每当玩家猜中某一格时,就将计数器加数,而不管之前是否就已经被猜中。需要一种机制来判别之前是否已经被猜中。

虚拟的行占有7个各自,而DotCom会占有其中连续的3格。下面的虚拟列展示出占领4,5,6三格的DotCom

DotCom有个实例变量——一个int数组来保存DotCom对象的位置

方案一 

使用第二个数组,每当玩家猜中某一格时,就把相对的那一格设定称true,之后每次猜中都要检查是否在之前就已经被猜过了

方案二 

可以只动用原来的数组,将任何命中的格子改为-1,这样只需要维护与检查一个数组

方案三 

在命中某个格子时就把它删除掉,因此格子就会越来越少,但是数组无法改变大小,因此我们必须作出新的数组并拷贝旧数组的值

如果数组能够缩小的话,方案三会更好,如此就不用拷贝并重新赋值引用 

2.2 ArrayList

Java SE函数库的一个类ArrayList的部分:

add(Object elem) 向list中加入对象参数

remove(int index) 在索引参数中移除对象

remove(Object elem) 移除该对象

contains(Object elem) 若和对象参数匹配返回“true”

isEmpty() 若list中没有元素返回“true”

indexOf(Object elem) 返回对象参数的索引或-1

size() 返回list中元素的一个数

get(int index) 返回当前索引参数的对象

1.创建

ArrayList<Egg> myList = new ArrayList<Egg>();

2.加入元素

Egg s = new Egg();

myList.add(s);

3.再加入元素

Egg b = new Egg();

myList.add(b);

4.查询大小

int theSize = myList.size();

5.查询特定元素

boolean isIn = myList.contains(s);

6.查询特定元素的位置

int idx = myList.indexOf(b);

7.判断集合是否为空

boolean empty = myList.isEmpty();

8.删除元素

myLIst.remove(s);

ArrayList与数组的比较

比较ArrayList与一般数组

  • 一般数组在创建时就必须确定大小

但对于ArrayList来说,只需要创建出此类型的对象就行。它不需要指定大小,因为它会在加入或删除元素时自动地调整大小。

  • 存放对象给一般数组时必须指定位置(必须要指定介于0到比length小1之间的数字)

若索引值超越了数组的限制,程序会在执行期出现错误

使用ArrayList时,可以用add(Int, Object)这个形式的方法来指定索引值,或者使用add(Object)的形式来给他自行管理大小

  • 一般数组使用特殊的语法

但ArrayList是个普通对象,所以不会有特殊的语法

  •  在Java 5.0中的ArrayList是参数化的(parameterized)

2.3 修改战舰游戏

全新配方的DotCom类

import java.util.ArrayList;
public class DotCom {
    
    private ArrayList<String> locationCells;

    public void setLocationCells(ArrayList<String> loc) {
        locationCells = loc;
    }
    
    public String checkYourself(String userInput) {
        String result = "miss";
        
        int index = locationCells.indexOf(userInput);
        
        if (index >= 0) {
            locationCells.remove(index);
            
            if (locationCells.isEmpty()) {
                result = "kill";
            } else {
                result = "hit";
            }
        }
        
        return result;
    }
}

2.4 设计真正的游戏

开发真正的“Sink a Dot Com”游戏 

游戏目标:以最少的猜测次数打掉计算机所安排的达康公司(Dot Com)网站。计算机会根据你的表现来评分。
初始设置:程序启动后,计算机会在虚拟的7×7方格上安排3个达康网站。安排完成后,游戏会要求你开始猜坐标。
进行游戏:因为我们还没有学到图形接口的程序设计,所以这一版会在命令行上进行。计算机会提示你输入所猜测的位置(格子),你会输入“A3”或“C5”等。计算机会回给你命中“Hit”、没中“Miss”或击沉“sunk”等回应。当你清光所有的达康时,游戏会列出你的分数并结束。

A.DotCom类

  • 增加名称变量

用来保存DotCom的名字,例如说“Pet.com”与“Go2.com”这样就可以在它们被击沉是列出名字

B.DotComBust类(the game)

  • 创建出3个DotCom
  • 指定DotCom的名称

对每个DotCom的setter调用以设定name这个实例变量

  • 将DotComBust类放在方阵上

比简单版更复杂,因为要考虑到重叠等问题。把指定DotCom位置的算法放在GameHelper这个已经写好的辅助性类中

  • 每次猜测要检查3个DotCom
  • 击沉3个DotCom后才能结束游戏
  • 脱离main()

DotComBust类的main()方法会初始化DotComButs对象

DotComBust对象会初始化GameHelper的实例来帮助执行某些功能

DotComBust对象会初始化1个ArrayList来保存3个DotCom对象

DotComBust对象创建出3个DotCom对象放到ArrayList中

DotComBust对象询问helper对象来设定DotCom对象的位置

DotComBust对象赋值DotCom对象的位置,而DotCom对象则会把自己的3格放在独立的ArrayList中

DotComBust对象从helper对象取得玩家的猜测值

DotComBust对象逐个要求DotCom检查猜测值是否有命中。DotCom会检查ArrayList并返回结果

游戏会持续进行直到所有的DotCom都被击沉为止

2.5 游戏的伪码

DotComBust这个类有3个主要的任务:启动游戏,进行游戏直到所有的Dot-Com都被击沉为止,以及结束游戏。虽然我们可以将这3个任务直接用3个方法来对应,但我们还是将进行游戏的工作分割成两个方法以便保持较小的功能模块。较小的方法比较好测试、除错与修改。

2.6 游戏程序

2.7 布尔表达式

“与”和“或”运算符(&&,||)

“不等于”运算符(!=和!)

短运算符(&&,||)

像&&与||,这些我们已经看过的运算符都称为短运算符。在&&表达式中,左右两边都为true这个表达式才会为true,若Java虚拟机发现左方的表达式为false,则它不需要也不会去计算右方的算式才知道要返回false,||也有相同的特点。

所以我们可以用以下这种方式来避免调用内容为null的指针变量的方法:

if (refVar != null && refVar.iaValidType()) {

        //执行有效变量的工作

}

长运算符(&,|)

&与|运算符使用boolean表达式时会强制Java虚拟机一定要计算运算符两边的算式,但这两个运算符通常是用来作位的运算。

2.8 使用Java API

在Java的API中,类是被包装在包中

要使用API中的类,必须知道它被放在哪个包中

在Java函数库中的每个类都属于某个包。这些包都有个名字,像是javax.swing(里面带有很快就会遇到的Swing接口类)。ArrayList是放在java.util这个包中。顾名思义,java.util放了很多工具类。第16章会讨论有关包的细节,包括如何自制包。

使用来自API的类是很简单的。只要把它们当作是自己写的就好,但是其中还有一个很大的不同:在程序的某个地方你必须要指明函数库类的完整名称,也就是包的名称加上类的名称。

也许你还不清楚,但是实际上已经到了好几个来自API的类。像是System(System.out.println)、String与Math(Math.Random())都是属于java.lang这个包。

2.9 使用包

必须指明程序代码中所使用到的类的完整名称

ArrayList并不是它的全名,如同“Mike”也不是全名一样(除非是Madonna或Cher这种)。完整的名称是这样的:

你必须告诉Java想要使用的是哪一个ArrayList。有两种方法可以指定:
A.IMPORT
放一个import述句在程序源文件的最前面:
import java.util.ArrayList;
public class MyClass {... }

B.TYPE
或者在程序代码中打出全名。不管在哪里,只要有使用到就打出全名。
声明的时候:
java.util.ArrayList<Dog> list = new java.util.ArrayList
用在参数的时候:
public void go(java.util.ArrayList<Dog> list) {  }
作为返回类型的时候:
public java.util.ArrayList<Dog> foo() {... }

*除非是来自于java.lang 这个包中

2.10 查询说明文件

查阅参考书和HTML API文档

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

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

相关文章

win10桌面便签小工具,安全无广告下载哪一款

很多人在日常生活中都有忘记处理事务的情况&#xff0c;偶然的一次两次可能自己就在当时懊恼一下&#xff0c;但是次数多了以后或者是涉及到处理重要的工作任务时&#xff0c;就会给大家带来心里负担及压力。 为避免大家在日常工作中忘记重要的事情&#xff0c;大家可以选择在…

el-table添加fixed属性后底部滚动条添加小手

0 效果 1 样式 /deep/ .el-table--scrollable-x {cursor: pointer; } /deep/ .el-table__empty-block {cursor: auto; } /deep/ .el-table__row {cursor: auto; }

3-k8s-镜像仓库harbor搭建

文章目录 一、概念二、安装harbor三、使用harbor仓库 一、概念 官方概念&#xff1a;Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器。 我们平时拉去镜像都是从线上仓库拉去&#xff0c;但是企业内部的镜像一般都不会随意传到网上&#xff0c;而是保存在自己公…

Halo-Theme-Hao文档:如何设置导航栏?

本篇文章会教你如何配置导航栏&#xff0c;最终效果参考如下。 感谢 Lanbin、小孙同学 等同学的贡献&#xff08;语雀参与编辑&#xff09;。 1标题 进入站点后台 点击左侧面板中的 主题 点击上方的 导航 修改 标题字段即可 2主菜单 主菜单即网站导航栏中间部分的菜单 进入站点…

ChatGPT AIGC 实现多条件求和函数案例

从明细数据中,按多条件进行求和是职场办公应用活动经常要完成的事情。 像这样的需要我们完全可以不用自己动手去查相关函数的应用,让ChatGPT来完成就可以了。 Prompt:有一个Excel表格B3至B483为年份,C3至C483为商品名称,E3至E483为省份,F3至F483为销售额,请写出Excel函…

解惑Android Scoped Storage

原文链接 Android Scoped Storage Puzzles 安卓对于文件存储这块&#xff0c;其实是相当混乱的&#xff0c;在早期的版本中对存储甚至是没有所谓的管理的&#xff0c;有多种方法可以操作文件存储&#xff0c;比如通过Java原生的方式(File/InputStream/OutputStream)&#xff0…

C++算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例

相关 源码测试用例下载 https://download.csdn.net/download/he_zhidan/88430716 包括4个压缩包&#xff0c;初始代码&#xff0c;实现前缀和&#xff0c;实现前缀积&#xff0c;实现前缀异或。都是在前者的基础上修改的。 本博文是CSDN学院课程的讲义 https://edu.csdn.net/c…

记录--P0事故预警

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 背景 某一天&#xff0c;前端小余同学和后端别问我小哥在做登录业务接口对接&#xff0c;出于业务的特殊性和安全性的考虑&#xff0c;她和后端小哥约定“user”相关信息参数需要通过HTTP协议的header…

Elastic Stack 和 Docker Compose 入门:第 2 部分

作者&#xff1a;Eddie Mitchell 欢迎阅读 Elastic Stack 和 Docker Compose 入门的第二部分。 在第一部分博客中&#xff0c;我们了解了 Docker Compose 的基础知识以及如何将单节点集群建立为本地游乐场&#xff0c;其中包括 Elasticsearch、Kibana、Logstash、Metricbeat 和…

JVS-rules规则引擎,解决大数据风控的自动化决策利器

规则引擎中的评分卡节点是一种用于评估客户信用、风险等级或其他指标的重要工具。它通常用于金融、信贷等领域&#xff0c;以便根据一系列预定义的规则和权重来对客户进行评分。以下是评分卡节点的主要功能、作用以及配置方式的介绍&#xff1a; 功能和作用&#xff1a; 评估…

BUUCTF学习(5): 命令执行Ping

1、介绍 2、解题 127.0.0.1|cat /flag 结束

第三章 交换技术及应用

3.1 port-vlan技术 3.1.1 VLAN概述 VLAN(Virtual Local Area Network)&#xff0c;虚拟局域网VLAN是在一个已建好的物理网络上划分出来的逻辑网络。作用&#xff1a;隔离广播域&#xff0c;同一个VLAN主机可以通信而不同VLAN不能通信。 3.1.2 VLAN划分方法——Port-VLAN 基于端…

ArcGIS笔记7_如何创建新的shp要素文件?新shp的坐标系选择?

本文目录 前言Step 1 创建新的shp要素文件的操作Step 2 常用的坐标系选择Step 3 有点笨但好用的新建shp要素的方法 前言 很多ArcGIS新手都会遇到的问题&#xff0c;会编辑现成的shp要素文件&#xff0c;但不会创建新shp&#xff0c;而且创建时需要选择新的坐标系&#xff0c;这…

OpenSIPS 防扫描处理

文章目录 1. 问题背景2. 防范处理2.1 IP 封禁2.2 OpenSIPS 处理2.2.1 REGISTER 请求2.2.2 INVITE 请求 1. 问题背景 OpenSIPS 作为 SIP 注册服务器&#xff0c;通常需要放在公网供公司各地的员工使用&#xff0c;但是这样就会产生外部扫描问题。一般来说外部扫描量不会很大&am…

ElasticSearch-数据查询

ElasticSearch-数据查询 目录概述需求&#xff1a; 设计思路实现思路分析1.查询某索引下的所有数据2.二、条件查询3.、条件查询方式二4.四、分页查询5.五、格式化数据 六、排序七 其他条件执行的成立的查询九、范围查询 参考资料和推荐阅读 Survive by day and develop by nigh…

13-k8s-ingress网络

文章目录 一、ingress介绍二、创建nginx和tomcat供测试三、创建ingress-http四、yaml方式安装ingress五、helm方式安装ingress&#xff08;推荐&#xff09;六、Ingress的HTTPS代理 一、ingress介绍 Service对集群之外暴露服务的主要方式有两种&#xff1a;NotePort和LoadBalan…

强化学习基础(2)—常用算法总结

目录 1.Value-Based 2. Policy-Based 参考文献 1.Value-Based Sarsa&#xff08;State-action-reward-state’-action&#xff09;&#xff1a;是为了建立和优化状态-动作(state-action)的价值Q表格所建立的方法。首先初始化Q表格&#xff0c;根据当前的状态和动作与环境进行…

Mapping 设计指南

Mapping 设计指南 目录概述需求&#xff1a; 设计思路实现思路分析1、properties2.fields 3.search_analyzer4.2、format1、enabled2、doc_values 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0…

数据库、数据中台、数据仓库、数据湖区别

数据时代&#xff0c;各行业的企业都已经开始通过数据库来沉淀数据&#xff0c;但是真的论起数据库、数据仓库、数据中台&#xff0c;还是新出现的数据湖&#xff0c;它们的概念和区别&#xff0c;可能知道的人就比较少了&#xff0c;今天我们详细来比较了解一下。 一、数据仓…

FPGA通过读写突发对DS1302时钟的配置驱动

文章目录 前言一、pandas是什么&#xff1f;1、理论原理1、DS1302实时时钟芯片1、特性2、引脚定义3、有关读写操作的详细内容1、读写的几个端口信号2、命令字节3、突发读写时钟寄存器4、写保护位 4、数据读写时序&寄存器地址表1、数据单字节读写时序2、寄存器地址表 5、数据…