java的初步学习
java的下载与配置
下载java
安装jdk
根据自己的操作系统与位数进行选择即可在安装过程中记住路径
配置环境变量
右击此电脑,点击属性,找到高级系统设置
点击环境变量
新建系统变量 变量名取为 JAVA_HOME 变量值为安装java的路径
在用户变量的path进行编辑并新增加一行 输入**%JAVA_HOME%\bin**
测试
按下win+R,点击cmd进入命令行,输入java察看是否安装完毕
vscode配置java环境
安装扩展
- debugger for java
- language support for java
- extension pack for java
新建一个Java文件进行运行就好啦
java基础知识(基于MIT 6.092: Introduction To Programming In Java)
chapter1-types,variables,operators
first programme
1 |
|
分析一下基本结构
1 |
|
second programme
1 |
|
type
- boolean:真值(true or false)
- int:整数
- double:Real number(3.14,-2.1)
- String:字符串
variables
变量名称
assignment
用”=”进行赋值
third programme
1 |
|
operators
- assignments =
- addition +
- subtraction -
- multiplication *
- division /
- 使用时的优先级遵守数学中的优先级
string contcation
1 |
|
hw1
第一次作业设计一个计算最终位置的小程序
1 |
|
chapter2-more types,methods,conditions
more types
- division(在整数和小数中使用存在差异,这和C语言是相符的)
- 也存在类型转化,这也和C语言相符合
methods
- adding methods
for example
1 |
|
- parameters
1 |
|
example
1 |
|
- multiple parameters
即类似C语言中引入多个参数进行传入
- return values
同样运用类似的方法,即public static (void=>type name) name()
- variable scope
变量的作用域就在它们所定义的{}中
1 |
|
methods:building blocks
数学函数(形如Math.+函数进行引用)
conditionals
if statement(和C语言中一样)
comparision operator(> < >= <= ==)
boolean operator(&& ||)
else 和 else if
hw2
设计一个计算薪资的程序
1 |
|
chapter3-Loops,arrays
good programming style
目的是为了让你的代码可读性更强
在定义变量名时尽量使之与程序本身有关系
用好缩进来表示程序的层次结构
在一行较长的代码中间可适当多加空格
loops
the while operator(用法与C语言相同)
the for operator(用法与C语言相同)
loop的其余用法也都与C语言相同
array
- create an array
1 |
|
- initiallize an array
1 |
|
- length of an array
1 |
|
- string array
1 |
|
hw3
寻找一个最大值
1 |
|
chapter4-class and objects
object oriented programming(面向对象编程)
defining classes
class definition
1 |
|
using classes
example
1 |
|
reference vs values
primitives vs references
primitive type就是java中最基本的如:int,double,float
reference type是数组和对象references
object的位置在java中称作reference
下面的这张图能够比较好解释
并使用=update the reference
static methods and types
- 静态内部类
特点:不依赖于外部类的实例,可以直接通过外部类的类名访问。
静态内部类只能访问外部类的静态成员和静态方法,不能直接访问外部类的实例变量或方法。
example
1 |
|
- 静态方法(不需要创造类的实例则可以调用,不能直接访问变量实例或实例方法)与实例方法(必须先创立类的实例再进行调用)
example
1 |
|
- 两者的优劣
静态方法适合那些不依赖于实例变量状态的操作,例如实用程序方法、工具方法或者仅仅对输入参数进行处理的方法。
实例方法适合需要访问和操作实例变量、实现对象特定行为的方法,例如修改对象状态、调用对象的其他方法等。
hw4
这一次的程序涉及两个java程序Book.java和Library.java
1 |
|
chapter5-access control,class scope,packages,java api
access control
- public vs private
public:其他class都能用
private:只有这个class可以用
class scope
- “this” keyword(意味着此对象)
1 |
|
packages
- 每一个class若属于一个package目的相同
- classes若在其他package中,则需要import
example
1 |
|
为什么使用package(将相似的函数结合在一起)
special package(java.lang 所有的class都能“看见”java.lang中的class)
java API(应用程序接口)
- array list
1 |
|
- Sets(Treeset 和 hashset) 没有下标
1 |
|
- maps(存储一组值,通过寻找key返回value)
1 |
|
- 补充
1 |
|
1 |
|
hw5
设计一个动画,但是主程序已经给出,主要修改一个副程序
1 |
|
chapter6-design,debugging,interfaces
good programme designing
debugging
- assert(感觉比较类似python中的assert)
1 |
|
interfaces
java内置常见方法
List类
1 |
|
Stringbuilder(处理大量字符串时可以使用)
1 |
|
String类(字符串处理方式)
1 |
|
hashmap
1 |
|
leetcode记录
滑动窗口
209 长度最小的子数组(中等)
- 最开始利用java语言尝试用暴力法进行解决但是运行超时,现在准备用滑动窗口的思路进行解决。
- 解决此问题的大体思路是利用双指针的思想,头尾进行向右移动的操作,如果此时的sum>=target,则start向右移动,否则end向右移动。
1 |
|
30 串联所有单词的子串(困难)
最开始的思路就是从给定的字符串入手一个一个往前找,
但是检测到178项时出现超时的情况,只有再进一步结合滑动窗口的特性进行算法的优化。这样的时间复杂度为$o(n^2)$改进算法:根据题解可以知道需要利用哈希表加上滑动窗口对算法进行优化
- 我们首先使用一个哈希表map来记录words中单词与其相应的出现的次数
- 然后我们可以对于输入的字符串s进行分析,每次进行取长度为mxn的子串
- 但是这样写出来的程序仍然存在超时的可能,我们可以进行取余的优化
- 也就是通过单词长度的余数进行分类的区划,在每一个区划中
1 |
|
76 最小覆盖子串(困难)
动态规划
3259 最大化的能量(中等)
698 划分为k个相等的子集(中等)
- 感觉每日一题得坚持下去
字符串
3265 统计近似相等数对(中等)
- 这是一场周赛的题目,当时我作答时最开始使用哈希表思路有误
- 后面发现可以通过将整数转化为字符串,再将字符串转化为字符数组
- 然后进行暴力交换进行枚举应该能通过测试,因为这道题的数量级并不是很大
- 在暴力修改的过程中发现出现问题,最重要的问题就是每个整数都会存在一个前导零,所以交换后可能存在0的情况
- 一个多小时的缝缝补补,终于结束了,码力还得练
1 |
|