第二周进度报告

news/2024/11/15 15:20:37/文章来源:https://www.cnblogs.com/XYu1230/p/18300549

这一周主要学习了Java和数据结构的基础知识

其中Java主要学习了数组的使用,方法的概念与使用,使用Java语言完成一些简单的算法(质数判断),二维数组
,以及Java语言面向对象的知识,以及学习了封装
数据结构继续学习了顺序表以及链表的各种功能的实现,以及循环链表和双向链表

接下来我会继续学习Java和数据结构更深入的知识,以案例为主,规划自己的学习内容

数组

数组是一个容器,可以用来存储同种数据类型的多个元素.
格式一:int [] array
格式二:int array[]
数组的初始化:就是在内存中,为数组容器开辟空间,并将数据存入容器的过程.
int[] array = new int[]{}
简写:int[] array = {}

package me.JavaStudy;public class Test1 {public static void main(String[] args) {int[] array = {1,2,3,4,5};System.out.println(array);}
}//[I@7b23ec81
// [ 表示这是一个数组
// I 表示该数组的类型
// @ 表示一个间隔符号,固定格式
// 7b23ec81 才是数组的真正地址(十六进制)

数组长度 = 数组名.length

package me.JavaStudy;public class Test1 {public static void main(String[] args) {int[] array = {1,2,3,4,5};//array.fori  IDEA快捷遍历数组for (int i = 0; i < array.length; i++) {System.out.println(array[i]);}}
}

数组的动态初始化:int[] arr = new int [10];
数组具有默认初始化值
整数 0
小数 0.0
字符 '/u0000' 空格
布尔类型 false
引用数据类型 null

//打乱数组
package me.JavaStudy;import java.util.Random;public class Test1 {public static void main(String[] args) {int[] array = {1,2,3,4,5};Random r = new Random();for (int i = 0; i < array.length; i++) {int randomIndex = r.nextInt(array.length);int temp = array[i];array[i] = array[randomIndex];array[randomIndex] = temp;}for (int i = 0; i < array.length; i++) {System.out.print(array[i] + " ");}}
}
  • 栈 方法运行时使用的空间
  • 堆 存储对象或数组,new来创建的,都存储在堆内存
  1. 只要是new出来的一定在堆里面开辟了一个小空间
  2. 如果new了多次,那么在堆里面有多个小空间,每个小空间都有各自的数据

方法

方法是程序中最小的执行单元

  • 重复代码,具有独立功能的代码可以抽取到方法中.
  • 可以提高代码的复用性和可维护性
package me.JavaStudy;
//带参数的方法
public class Test1 {public static void main(String[] args) {getSum(10,20);}public static void getSum(int number1,int number2){int result = number1 + number2;System.out.println(result);}
}
package me.JavaStudy;import java.util.Scanner;public class Test1 {public static void main(String[] args) {int a,b,c,d;Scanner sc = new Scanner(System.in);a = sc.nextInt();b = sc.nextInt();c = sc.nextInt();d = sc.nextInt();boolean bo = isEqual(a,b,c,d);if(bo){System.out.println("相等");}else System.out.println("不相等");}public static boolean isEqual(int a,int b,int c,int d){if(a*b == c*d)return true;return false;}}

方法的格式:
public static 返回值类型 方法名 (参数){
方法体;
return 返回值;
}

各种基本方法实现

package me.JavaStudy;public class Test1 {public static void main(String[] args) {int[] a = {1,2,356,4,5,6,78};int[] copy = copyOfRange(a,1,4);printarr(copy);}//打印数组public static void printarr(int[] arr){System.out.printf("[");for (int i = 0; i < arr.length; i++) {if(i != arr.length-1){System.out.print(arr[i]+",");}else System.out.print(arr[i]);}System.out.printf("]");}//求最大值public static int getMax(int[] arr){int max = arr[0];for (int i = 0; i < arr.length; i++) {if(arr[i] > max){max = arr[i];}}return max;}//判断一个数在数组中是否存在public static boolean isExist(int[] arr,int target){for (int i = 0; i < arr.length; i++) {if(arr[i] == target)return true;}return false;}//拷贝数组public static int[] copyOfRange(int[] arr,int from ,int to){int index = 0;int[] newArr = new int[to - from];for(int i = from; i < to; i++){newArr[index] = arr[i];index++;}return newArr;}
}

基本数据类型:数据值时存储在自己的空间中

  • 特点:赋值给其他变量,也是赋的真实的值
    引用数据类型:数据值时存储在替他空间中,自己空间中存储的是地址值
  • 特点: 赋值给其他变量,赋的是地址值.

package me.studyJava;public class Test1 {public static void main(String[] args) {int count = 0;for (int i = 100; i <= 200; i++) {if(isPrime(i))count++;}System.out.println(count);}//判断是否为质数的方法  public static boolean isPrime(int x) {for(int i = 2; i <= Math.sqrt(x); i++){if(x % i == 0){return false;}}return true;}
}

//生成验证码

package me.JavaStudy;import java.util.Random;//生成验证码
public class Test  {public static void main(String[] args) {char[] ch = new char[52];for (int i = 0; i < ch.length; i++) {if(i <= 25){ch[i] = (char)('a' + i);}else{ch[i] = (char)('A' + i - 26);}}/* for (int i = 0; i < ch.length; i++) {System.out.printf(ch[i] + " ");}*/String result = "";Random r = new Random();for (int i = 0; i < 4; i++) {int randomIndex = r.nextInt(ch.length);result += ch[randomIndex];}int randomNum = r.nextInt(10);result += randomNum;System.out.println(result);}
}

//抽奖游戏

package me.JavaStudy;import java.util.Random;//抽奖游戏
public class Test  {public static void main(String[] args) {int[] money = {2,588,888,1000,10000};Random r = new Random();int count = 5;while(count != 0){int randomIndex = r.nextInt(5);if(money[randomIndex] != 0){System.out.println(money[randomIndex] + "被抽中了");money[randomIndex] = 0;count--;}}}}

//抽奖游戏加强代码 --打乱数组

package me.JavaStudy;import java.util.Random;//抽奖游戏代码优化 --打乱数组
public class Test  {public static void main(String[] args) {int[] money = {2,588,888,1000,10000};Random r = new Random();for (int i = 0; i < money.length; i++) {int randomIndeax = r.nextInt(money.length);int temp = money[i];money[i] = money[randomIndeax];money[randomIndeax] = temp;}for (int i = 0; i < money.length; i++) {System.out.println(money[i]);}}}

//双色球彩票模拟系统

package me.JavaStudy;import java.util.Random;
import java.util.Scanner;//抽奖游戏代码优化 --打乱数组
public class Test  {public static void main(String[] args) {//生成中奖号码int[] arr = creatArr();//用户输入号码int[] userArr = userInput();//判断是否中奖int redCount = 0,blueCount = 0;for (int i = 0; i < userArr.length-1; i++) {if(isExist(arr,userArr[i])){redCount++;}}if(arr[arr.length-1] == userArr[userArr.length-1])blueCount++;System.out.print("中奖号码为:");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}System.out.println();if(redCount == 6 && blueCount == 1){System.out.println("恭喜中奖1000万!");}else if(redCount == 6 && blueCount == 0){System.out.println("恭喜中奖500万!");}else if(redCount == 5 && blueCount == 1){System.out.println("恭喜中奖3000!");}else if(redCount == 5 && blueCount == 0 || redCount == 4 && blueCount == 1){System.out.println("恭喜中奖200!");}else if(redCount == 4 && blueCount == 0 || redCount == 3 && blueCount == 1){System.out.println("恭喜中奖10!");}else if(redCount == 2 && blueCount == 1 || redCount == 1 && blueCount == 1 || redCount == 0 && blueCount == 1){System.out.println("恭喜中奖5!");}else {System.out.println("谢谢参与");}}//创建数组public static int[] creatArr(){int[] arr = new int[7];Random r = new Random();for (int i = 0; i < 6; i++) {int randomRed = r.nextInt(33)+1;if(!isExist(arr,randomRed)){arr[i] = randomRed;}}int randomBlue = r.nextInt(16)+1;arr[arr.length - 1] = randomBlue;return arr;}//用户输入号码public static int[] userInput(){Scanner sc = new Scanner(System.in);int[] arr = new int[7];for(int i = 0;i < 6;){System.out.println("请输入第" + (i+1) +"个红球号码");int inputRed = sc.nextInt();if(inputRed >= 1 && inputRed <= 33){if(!isExist(arr,inputRed)){arr[i] = inputRed;i++;}else{System.out.println("输入重复,请重新输入");}}else{System.out.println("输入错误,请重新输入");}}while (true) {System.out.println("请输入蓝球号码");int inputBlue = sc.nextInt();if(inputBlue >= 1 && inputBlue <=16){arr[arr.length-1] = inputBlue;break;}else {System.out.println("输入错误,请重新输入");}}return arr;}//判断数字是否在数组中出现过public static boolean isExist(int[] arr,int number){for (int i = 0; i < arr.length; i++) {if(arr[i] == number)return true;}return false;}
}

//二维数组

package me.JavaStudy;public class twoArray {public static void main(String[] args) {//二维数组int[][] arr = {{1,2,3},{4,5,6,7},{8,9,10},};//二维数组的遍历for (int i = 0; i < arr.length; i++) {for(int j = 0; j < arr[i].length; j++){System.out.print(arr[i][j] + " ");}System.out.println();}}}

二维数组的动态初始化

  • 格式: 数据类型[][] 数组名 = new 数据类型[m][n];

类和对象

  • 类(设计图):是对象共同特征的描述.
  • 对象:是真实存在的具体东西.
public class 类名1.成员变量(属性)2.成员方法(行为)
类名 对象名 = new 类名();
  • 用来描述一类事物的类,叫做Javabean类-不写main方法
  • 编写main方法的类,叫做测试类

封装

对象代表什么,就得封装对应的数据,并提供数据对应的行为
比如 人关门 是 门的行为

package me.JavaStudy;public class GirlFriend {//private是一个权限修饰符//可以修饰成员属性和方法//被private修饰的成员只能在本类中访问private int age;//赋值public void setAge(int a){if(a >= 18 && a <= 50){age = a;}else {System.out.println("数据不合法");}}//获取public int getAge(){return age;}
}
package Test1;public class GirlFriend {private int age;public void setAge(int age){this.age = age;}
}
package Test1;public class Student {private int age;private String name;//默认构造public Student(){System.out.println("默认构造");}//有参构造public Student(int age,String name){this.age = age;this.name = name;System.out.println("有参构造");}
}

快捷键:alt + fn + insert //自动生成get和set和构造函数


线性表的链式表示

链表包括:单链表,双链表,循环链表
带头结点 头指针->头节点->首元节点
不带头指针 头指针 -> 首元结点
*链表的特点:
1. 结点在存储器的位置是任意的,即逻辑上相邻的数据在物理上不一定相邻
2. 访问时只能通过头指针进入链表,并通过每个结点的指针域一次向后顺序扫描其余节点,所以寻找第一个结点但和最后一个结点所花费的时间不一样.
顺序表->随机存取
链表 ->顺序存取


#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 int ElemType;typedef struct LNode{ElemType data;struct LNode *next;
}LNode,*LinkList;//建立链表
Status InitList_L(LinkList &L){L = new LNode;L->next = NULL;return OK;
}//判断链表是否为空
int ListEmpty(LinkList &L){if(L->next == NULL)return 0;else return 1;
}//销毁链表
Status DestoryList_L(LinkList &L){LNode *p;while(L){p = L;L = L->next;delete p;}return OK;
}Status DeleteList_L(LinkList &L){LNode *p = L->next;LNode *q;while(p){q = p->next;delete p;p = q;}L->next = NULL;return OK;
}//计算链表的长度
int ListLength_L(LinkList &L){LNode *p = L->next;int count = 0;while(p){p = p->next;count++;}return count;
}//取值
Status GetElem_L(LinkList L,int i,ElemType &e){LNode *p = L->next;int j = 0;while(p && j < i){p = p->next;j++;}if(!p || j > i)return ERROR;e = p->data;return OK;
}//查找
LNode* LocateElem_L(LinkList L,ElemType e){LNode *p;p = L->next;while(p){if(p->data){return p;}p = p->next;   }return p;/*while(p && p->data != e){p = p->next;}return p;*/
}//将数据元素插入到pos位置前
Status ListInsert_L(LinkList &L,int pos,ElemType e){int i = 1;LNode *p = L;while(p && i < pos){ p = p->next;i++;}LNode* newl = new LNode; newl->data = e;p->next = newl;newl->next = p->next;return OK;
}//将线性表L中第i个数据元素删除
Status ListDelete_L(LinkList &L,int i,ElemType &e){LNode* p = L;int j = 0;while(!(p->next) && j < i-1){p = p->next;++j;}if(!(p->next)||j>i-1)return ERROR;LNode* q = new LNode;q = p->next;p->next = q->next;e = q->data;delete q;return OK;}//头插法建立新链表
void CreateList_H(LinkList &L,int n){L = new LNode;L->next = NULL;for(int i = 0; i < n; i++){LNode *p = new LNode;cin>>p->data;p->next = L->next;L->next = p;}
}//尾插法建立新链表
void CreatList_P(LinkList &L,int n){L = new LNode;L->next = NULL;LNode* r = L;for(int i = 0; i < n; i++){LNode* p = new LNode;cin>>p->data;p->next = NULL;r->next = p;r = p;}
}int main(){return 0;
}

循环链表:是一种头尾相连的链表

  • 优点 :从表中任意结点出发均可找到表中其他结点
    注意:表的操作常常是在表的首尾位置进行
    尾指针表示单循环链表:a1 = R->next->next
    an = R

单链表,循环链表,和双向链表的时间效率比较

存储密度:是指结点数据本身所占的存储量和整个节点结构中所占的存储量之比即:
存储密度 = 结点数据本身所占的空间/结点所占用的空间总量.
*链式存储结构的优点:
* 结点空间可以动态申请和释放。
* 数据元素的逻辑次序靠结点的指针来表示,插入和删除时,不需要移动数据元素。

  • 链式存储结构的缺点

顺序表和链表的比较


//合并链表
void MergeList(LinkList &La,LinkList &Lb,LinkList&Lc){LNode* pa = La->next;LNode* pb = Lb->next;LNode* pc = Lc = La;while(pa && pb){if(pa->data >= pb->data){pc->next = pb;pc = pb;pb = pb->next;}else {pc->next = pa;pc = pa;pa = pa->next;}}pc->next = pa ? pa : pb;
}

栈和队列

  • 栈和队列是两种常见的,重要的数据结构
  • 栈和队列是限定插入和删除只能在表的"端点"进行的线性表.
    栈--后进先出-子弹夹
    队列--先进先出

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring MVC 中 HttpMessageConverter 转换器

1. Spring MVC 中 HttpMessageConverter 转换器 @目录1. Spring MVC 中 HttpMessageConverter 转换器2. 补充:什么是 HTTP 消息3. 转换器3.1 转换器转换的是什么4. Spring MVC中的 AJAX 请求5. @ResponseBody 将服务器端的 return 返回值转化为“字符串(JSON格式的字符串)”再…

暑假集训 第一间

身体集训了,但是脑子没跟上(7.11 上午 唐诗名校联考也是考完了 看得出来学校很重视这次考试啊 答题卡都印的黑白的 ……你说得对,但是请你先赏析一下微醺 不过这并不能影响我的发挥 成功的一张卷子也没做完 😅 下午 本来 huge 是想让我们去教室听讲评的 然而生奥的都去集训…

第二周学习报告

又经过了一周的学习,今天对本周学习进行总结 本周安装了IDEA,了解并学习了相关知识。还学习了Java中键盘录入、运算符、判断和循环的用法。 IDEA IDEA全称IntelliJ IDEA,是java编程语言的集成开发环境,它广泛应用于软件开发领域。 IDEA官网:https://www.jetbrains.com/ide…

C++11标准库chrono、future、 atomic、condition_variable、mutex、thread梳理 (5万字)

C++11标准库 、shared_future、async、packaged_task、promise、future、<chrono> C++11中提供了日期和时间相关的库chrono。 chrono库主要包含三种类型的类:时间间隔duration、时钟clocks、时间点time point。 时间间隔duration常用类成员duration表示一段时间间隔,用…

Vulnhub靶场 | DC系列 | DC-3

DC-3 环境搭建靶机镜像下载地址:https://vulnhub.com/entry/dc-32,312/ 需要将靶机和 kali 攻击机放在同一个局域网里; 本实验kali 的 IP 地址:192.168.10.146。渗透测试 使用 nmap 扫描 192.168.10.0/24 网段存活主机 ┌──(root💀kali)-[~/桌面] └─# nmap -sP 192.16…

Vulnhub靶场 | DC系列 | DC-2

DC-2 目录环境搭建 渗透测试环境搭建靶机镜像下载地址:https://vulnhub.com/entry/dc-2,311/ 需要将靶机和 kali 攻击机放在同一个局域网里; 本实验kali 的 IP 地址:192.168.10.146。渗透测试 使用 nmap 扫描 192.168.10.0/24 网段存活主机 ┌──(root💀kali)-[~/桌面] └…

llm学习:1.3 git相关

一、介绍 二、仓库 适当比较,砥砺前行

模型部署 - TensorRT Triton 学习

先介绍TensorRT、Triton的关系和区别: TensorRT:为inference(推理)为生,是NVIDIA研发的一款针对深度学习模型在GPU上的计算,显著提高GPU上的模型推理性能。即一种专门针对高性能推理的模型框架,也可以解析其他框架的模型如tensorflow、torch。 主要优化手段如下: Trito…

Vulnhub靶场 | DC系列 | DC-1

DC-1 目录环境搭建 渗透测试1. 信息收集 2. 漏洞利用 3. 提权DC ~ VulnHub VulnHub provides materials allowing anyone to gain practical hands-on experience with digital security, computer applications and network administration tasks. https://www.vulnhub.com/s…

Smart-doc:零注解侵入的API接口文档生成插件

零注解侵入的API接口文档生成插件——Smart-doc smart-doc 是一款同时支持 JAVA REST API 和 Apache Dubbo RPC 接口文档生成的工具,在业内率先提出基于JAVA泛型定义推导的理念, 完全基于接口源码来分析生成接口文档,不采用任何注解侵入到业务代码中。 你只需要按照java-doc…

如何对Linux系统进行基准测试4工具Sysbench

Sysbench简介 Sysbench是一款多用途基准测试工具,可对CPU、内存、I/O甚至数据库性能进行测试。它是一个基本的命令行工具,提供了直接、简便的系统测试方法。github地址:https://github.com/akopytov/sysbench 。主要功能:CPU: 衡量CPU执行计算密集型任务的能力。 内存: 衡量…

containerd 容器基础环境组件的搭建

1 基础环境说明(1)本次所有部署软件版本说明软件名称 版本号操作系统内核(后续升级为 lt-5.4.278)CentOS 7.9.2009 (3.10.0-1160.el7) 1c1GB 20GBCentOS-7-x86_64-Minimal-2009.isocontainerd v1.6.6cfssl v1.6.1cni v1.1.1crictl v1.24.2nerdctl 1.7.6buildkit v0.14.1(2)系统…