第一周进度报告
在第一周,我主要学习了Java的一些基础知识和了解了一下算法与数据结构和markdown语法,我发现在Java的许多基础知识中有许多是和C语言类似的,主要的学习参考是学习的B站上的黑马程序员,以下是我这周的学习记录与笔记
day1
打开CMD
1.Win + R
2.输入 cmd
常见CMD命令
- 盘符名称+冒号
盘符切换
E: 切换到E盘 - dir
查看当前路径下的内容 - cd目录
进入单级目录 - cd ..
回退到上一级目录 - cd 目录一\目录二...
进入多级目录 - cd
回退到盘符目录 - cls
清屏 - exit
退出命令提示符窗口
为什么要配置环境变量?
我们想要在任意的路径下都可以打开一个指定的软件,就可以把软件的路径配置到环境变量中。
设置环境变量
此电脑属性->高级系统设置->环境变量->在path中新建一个软件的路径
在CMD中直接输入软件的名称即可打开软件
下载的java软件
oracle
javac是JDK提供的编译工具,将.java文件编译成.class文件
java也是JDK提供的一个工具,用来运行代码,不加后缀名
Hello world
1.用记事本编写代码
2.编译文件
3.运行程序
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello world");
}
}
day2
配置了环境变量 JAVA_HOME
使用vscode 成功并编译运行了HelloWorld
Java的三大分类
- JavaSE
- JavaME
- JavaEE
Java语言跨平台的原理
- Java语言的跨平台是通过虚拟机实现的
- Java语言不是运行在操作系统里面的。而是运行在虚拟中的.
- 针对于不同的操作系统,安装不同的虚拟机就可以了。
JDK(Java Development kit):Java开发工具包
day3
注释和关键字
- 注释
- 单行注释 //
- 多行注释 /* */
- 文档注释 /** */
*关键字
关键字全部小写 - class关键字表示定义一个类,后面跟随类名.
字面量
public class ValueDome{
public static void main(String[] args){
//整数
System.out.println(666);
System.out.println(-555);
//字符
System.out.println('A');
System.out.println("字符串");
//浮点数
System.out.println(3.14159);
//布尔类型
System.out.println(true);
System.out.println(false);
//空类型null不能直接打印
}
}
\t 制表符
在打印的时候,把前面的字符串补齐到8,或者到8的倍数,最少补一个,最多补8个.
public class ValueDome{
public static void main(String[] args){
//制表符的基本用法
System.out.println("hello"+"world");
System.out.println("hello"+'\t'+"world");
}
}
/*
helloworld
hello world
*/
变量
数据类型:限定了变量能储存数据的类型.
- 一条语句,可以定义多个变量.
- 变量在使用前必须要赋值
不同进制在代码中的表现形式
二进制:以0b开头
十进制:前面不加任何前缀
八进制:代码中以0开头
十六进制:代码中以0x+开头
在计算机中,任意数据都是以二进制的形式来存储的.
基本数据类型
Java语言的数据类型分为:基本数据类型,引用数据类型(暂时不学)
- byte关键字 范围(-128~127)
- long关键字 范围(19位数)
如果要定义long类型的变量,在数据值的后面需要加一个L作为后缀,L建议用大写,(不易与1搞混) - float关键字注意点:定义float类型变量的时候,数据值也需要加一个F作为后缀
4.布尔类型 boolean
取值范围大小关系:double>float>long>int>short>byte
day4
标识符
- 就是给类,方法,变量起的名字.
- 小驼峰命名法:方法,变量
- name firstName
- 大驼峰命名法:类
- Student GoodStudent
键盘录入
Scanner类
package day03;
//1.导包,找到Scanner这个类在哪,要写在类的上面
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args){
//2.创建对象
Scanner sc = new Scanner(System.in);
//3.接收数据
int i = sc.nextInt();
System.out.println(i);
}
}
两数相加:
//1.导包
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args){
//2.创建对象
Scanner sc = new Scanner(System.in);
System.out.println("输入第一个整数");
int number1 = sc.nextInt();
System.out.println("输入第一个整数");
int number2 = sc.nextInt();
System.out.println(number1 + number2);
}
}
IDEA项目结构介绍
- project(项目)
- module(模板)
- package(包)
- class(类)
- package(包)
- module(模板)
day5
拆分数字
package me.JavaStudy;
import java.util.Scanner;
public class Test {
//主入口
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个三位数:");
int n = sc.nextInt();
int ge = n % 10;
int shi = n / 10 % 10;
int bai = n / 10 / 10 % 10;
System.out.println(ge);
System.out.println(shi);
System.out.println(bai);
}
}
隐式转换(自动类型提升)
- 把一个取值范围小的数值,转成取值范围大的数据.
提升规则
- 取值范围小的,和取值范围大的进行计算,小的先提升为大的.
- byte short char 三种类型的数据在计算的时候,都会直接提升为int型.
当 "+" 操作出现字符串时,是拼接操作,连续进行"+"操作时,从左到右逐个执行
int a = 10;
a += b;
// 等同于 a = (int) (a + b)
Java逻辑运算符(和c略有不同)
短路逻辑运算符(与c相同)
package me.JavaStudy;
public class Test {
//主入口
public static void main(String[] args) {
int a = 10;
int b = 10;
boolean bo = ++a < 5 && ++b < 5;
//当左边的表达式确定最终的结果,那么右边的就不会参与进行
System.out.println(bo);
System.out.println(a);
System.out.println(b);
}
}
//运行结果:
//false
//11
//10
package me.JavaStudy;
public class Test {
//主入口
public static void main(String[] args) {
int height1 = 165;
int height2 = 210;
int height3 = 150;
//三元运算符
System.out.println(height3 > (height1 > height2 ? height1 : height2) ? height3 : (height1 > height2 ? height1 : height2));
}
}
运算符优先级:
day6
正数的原码 = 反码 = 补码
复数的补码 = 反码 + 1
计算机中的存储和计算都是以补码的形式进行的
">>"右移 相当于 *2
"<<"左移 相当于 /2
if(){
}
else{
}
//if用法
package me.Javastudy;
import java.util.Scanner;
public class Test {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入票的序号:");
int order = sc.nextInt();
if(order >= 0 && order <= 100){
if(order % 2 == 0){
System.out.println("坐右边");
}
else{
System.out.println("坐左边");
}
}
}
}
//switch case用法
package me.Javastudy;
import java.util.Scanner;
public class Test {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int week = sc.nextInt();
switch(week){
case 1:
System.out.println("跑步");
break;
case 2:
System.out.println("游泳");
break;
case 3:
System.out.println("慢走");
break;
case 4:
System.out.println("动感单车");
break;
case 5:
System.out.println("拳击");
break;
case 6:
System.out.println("爬山");
break;
case 7:
System.out.println("好好吃一顿");
break;
default:
System.out.println("输入错误");
break;
}
}
}
package me.Javastudy;
public class Test {
public static void main(String[] args){
//switch JDK12新特性 不用break,也不会case穿透
int number = 1;
switch(number){
case 1 -> System.out.println("一");
case 2 -> System.out.println("二");
case 3 -> System.out.println("三");
}
}
}
0~100数字之间的偶数和
package me.Javastudy;
public class Test {
public static void main(String[] args){
int sum = 0;
for(int i = 0; i <= 100; i+=2){
sum += i;
}
System.out.println(sum);
}
}
给出一个范围,求这个范围中既能被3整除又能被5整除的数字个数
package me.Javastudy;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int left = sc.nextInt();
int right = sc.nextInt();
int count = 0;
for (int i = left; i <= right; i++) {
if (i % 3 == 0 && i % 5 == 0) {
count++;
}
}
System.out.println(count);
}
}
学习的算法与数据结构的内容:
Day1
数据结构研究
操作对象:若干行数据记录
操作算法:增删查改
操作对象之间的关系:线性关系
数据结构:线性数据结构,线性表,非线性表
数据结构是一门研究非数值计算的程序设计中计算机的操作对象以及它们之间的关系和操作的学科。
基本概念和术语
- 数据:能输入计算机且能被计算机处理的各种符号的集合。
- 信息的载体
- 对客观事物符号化的表示。
- 能够被计算机识别,存储和加工。
- 包括:
- 数值型的数据:整数、实数
- 非数值型的数据:文字、图形、图像、声音。
- 数据元素(Date element)和数据项
数据元素
- 是数据的基本单位。在计算机中通常作为一个整体进行处理和考虑。
- 也称为元素,或者记录,顶点,节点。
- 一个数据元素可由若干个数据项组成。
数据项
- 构成数据元素不可分割的最小单位。
数据 > 数据元素 > 数据项
3.数据对象(Data Object)
*是性质相同,数据元素的集合。是数据的一个子集。
4.数据结构(Data Structure) - 数据元素之间的逻辑关系,也称为逻辑结构。
- 数据元素及其关系在计算机内存中的表示(又称为映像),称为数据的物理结构或数据的存储结构。
- 数据的运算和实现,即对数据元素可以施加的操作以及这些操作在相应的存储结构上的实现。
存储结构是逻辑关系的映像与元素本身的映像。逻辑结构是数据结构的抽象,存储结构是数据结构的实现。两者综合起来,建立了数据元素之间的结构关系
逻辑结构的种类
- 集合结构:结构中的数据元素之间除了同属于一个集合的关系外,无任何其他关系。
- 线性结构: 一对一
- 树形结构:一对多
- 图形结构或网状结构:多对多
四种基本存储结构
顺序存储结构 链接存储结构 索引存储结构 散列存储结构
5.数据类型(Data Type)和抽象数据类型(Abstract Data Type,ADT)
抽象数据类型定义模板
Day2
算法与算法分析
- 算法的描述
- 自然语言
- 流程图:传统流程图.NS流程图
- 伪代码:类语言
- 程序语言:C . JAVA
算法特性:
- 有穷性
- 确定性
- 可行性
- 输入
- 输出
T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度(O是数量级的符号),简称时间复杂度.
Day3
线性表
线性表是具有相同特性的数据元素的一个有限序列
- 数据元素的个数n定义为表的长度
- n = 0 称为空表
a1 a2 a3
a1 称为 a2的直接前驱
a3 称为 a2的直接后继
同一线性表中的元素必定具有相同特性,数据元素间的关系是线性关系
内部结点都有直接前驱和直接后继
Day4
线性表有两种基本的存储结构:
顺序存储结构(顺序影响映像)和链式存储结构
线性表的顺序表示和实现
顺序存储定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构.
线性表第一个数据元素a1的存储位置,称作线性表的起始位置或基地址.
//顺序表类型定义
#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量
typedef struct{
ElenType elem[LIST_INIT_SIZE];
int length; //当前长度
}SqList;
Day5
顺序表基础操作的实现
#include<iostream>
using namespace std;
//函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define MAXSIZE 100 //线性表存储空间的初始分配量
//Status 是函数的类型,其值是函数结果状态代码
typedef int Status;
typedef char ElemType;
//顺序表类型定义
typedef struct{
ElemType *elem;
int length; //当前长度
}SqList;
//构造一个空的顺序表L
Status InitList(SqList &L){
L.elem = new ElemType[MAXSIZE]; //分配空间
if(!L.elem) exit(OVERFLOW); //存储分配失败
L.length = 0; //空表长度为0
return OK;
}
//销毁线性表
void DestoryList(SqList &L){
if(L.elem)delete L.elem; //释放存储空间
}
//清空线性表
void ClearList(SqList &L){
L.length = 0; //将线性表长度置为0
}
//求线性表L的长度
int GetLength(SqList &L){
return (L.length);
}
//判断线性表是否为空
int IsEmpty(SqList &L){
if(L.length == 0)return 1;
else return 0;
}
//获取位置i相应位置数据元素的内容
int GetElem(SqList &L,int i,ElemType e){
if(i < 1 || i > L.length)return ERROR;
//判断i值是否合理,若不合理,返回ERROR
e = L.elem[i-1]; //第i-1的单元存储着第i个数据
return OK;
}
//在线性表中查找值为e的数据元素,返回其序号
int LocateElem(SqList &L,ElemType e){
for(int i = 0; i < L.length; i++){
if(L.elem[i] == e)return i+1; //查找成功,返回序号
}
return 0; //查找失败,返回0
}
Status ListInsert_Sq(SqList &L,int i,ElemType e){
if(i>L.length+1 || i < 1)return ERROR; //i值不合法
if(L.length == MAXSIZE)return ERROR; //当前存储空间已满
for(int j = L.length - 1; j >= 1; j--){
L.elem[j+1] = L.elem[j]; //插入位置及之后的位置后移
}
L.elem[i-1] = e;
L.length++;
return OK;
}
Status DeleteList(SqList &L,int i){
if(i > L.length || i < 1)return ERROR;
for(int j = i; j < L.length -1; j++){
L.elem[j-1] = L.elem[j];
}
L.length--;
return OK;
}
int main(){
return 0;
}
平均查找长度ASL(Average Search Length):
对于有n个记录的表
* 未确定记录在表中的位置。需要与给定值进行比较的关键字的个数的期望值*叫做查找算法的平均查找长度。
* ASL = P1+P2+...+(n-1)Pn-1 = (n+1)/2
顺序表优缺点
- 优点
- 存储密度大(结点本身所占存储量/结点结构所占存储量)
- 可以随机存储表中任一元素
- 缺点
- 再插入,删除时,需要移动大量元素
- 浪费存储空间
- 属于静态存储形式,数据元素的个数不能自由扩充.
在接下来的时间里,希望我能保持这种学习的热情,更加深入的学习Java和算法与数据结构的知识.