Java中的数组

article/2025/10/6 15:45:04

数组

1.什么是数组

数组就是存储相同数据类型的一组数据,且长度固定

基本数据类型4类8种:byte/char/short/int/long/float/double/boolean

数组,是由同一种数据类型按照一定的顺序排序的集合,给这个数组起一个名字。是一种数据类型,叫引用类型!

定义数组,在类型的后面加一个[],只要看到中括号,一定是数组!

类型 数组

int int[]

byte byte[]

short short[]

long long[]

float float[]

double double[]

char char[]

boolean boolean[]

下面的是引用类型

String String[]

Object Object[]

整型 byte/short/int/long 默认值是0

char字符默认值是’\u0000’ ,空

浮点 float/double默认值是0.0

布尔型 boolean默认值是false

其它对象的默认值是null

2数组的定义格式

标准格式 []表示数组数据类型 数组名[] = new 数据类型[长度];
在Java中因为这样定义数组名,常被认为是一种错误的标识符,所以后期定义数组为数据类型[] 数组名 = new 数据类型[长度];

3.数组初始化

​数组初始化的方式: 1.静态初始化 2.动态初始化

数组静态初始化

静态初始化1数据类型[] 数组名 = new 数据类型[]{值1,值2,值3.....}
静态初始化2数据类型[] 数组名 = {值1,值2,值3....}
数组初始化后,数据的个数就是数组的长度forEach循环
格式: for(数据类型 变量名 : 数组/集合){变量名;}将数组或集合中的每一个元素,遍历后交给变量,变量的数据类型要与数组或集合保持一致
public class StaticArrayDemo {public static void main(String[] args) {//声明数组,并静态初始化int[] nums = new int[] {1,2,3,4,5,6,7};//通过数组的下标,获取或者设置元素内容,下标从0开始nums[2] = 30;System.out.println("下标为2的元素:"+nums[2]);//2静态初始化String[] strs = {"赵云","关羽","吕布","典韦"};//通过循环的方式遍历数组//数组的长度length ,下标的最大数是length-1for (int i = 0; i < strs.length; i++) {System.out.println("第"+(i+1)+"个元素为:"+strs[i]);}//System.out.println(strs[4]);  //ArrayIndexOutOfBoundsException  数组下标越界,超出了数组最大位置//采用简易式for循环遍历数组内容,这种循环只做范围数据的遍历,这种循环叫做forEach循环for (String str : strs) {System.out.println(str);}}
}

在这里插入图片描述

数组动态初始化

动态初始化步骤:1.声明输出,并初始化一个固定长度的默认值数组2.通过数组的下标赋值数据类型[] 数组名 = new 数据类型[长度];数组名[下标] = 值;
public class AliveArrayDemo {public static void main(String[] args) {//声明数组,并创建数组对象String[] names = new String[4];//1.通过下标为数组元素赋值names[0] = "张三";names[1] = "李四";names[2] = "王麻子";//采用简易式for循环遍历数组内容,这种循环只做范围数据的遍历,这种循环叫做forEach循环for (String str : names) {System.out.println(str);}}
}

在这里插入图片描述

在这里插入图片描述

4.使用数组实现用户的登录注册

public class LoginArray {public static void main(String[] args) {Scanner in = new Scanner(System.in);String[] names = new String[20];String[] pwds = new String[20];// 初始化3个账户names[0] = "admin";pwds[0] = "admin";names[1] = "system";pwds[1] = "123456";names[2] = "zhangsan";pwds[2] = "123456";do {System.out.println("========欢迎来到桑榆商城========");System.out.println("\t1.登录\n\t2.注册\n\t3.退出");System.out.println("============================");System.out.print("请选择:");int choose = in.nextInt();switch (choose) {case 1:System.out.println("欢迎来到桑榆商城>>登录");int ci = 3;do {System.out.println("请输入用户名:");String name = in.next();System.out.println("请输入密码:");String pwd = in.next();// 用于循环数组,比较所有已存在的账户,一轮for循环代表一次登录for (int i = 0; i < pwds.length; i++) {// 遍历数组所有元素,但并不是所有元素都有值,需要过滤if (pwds[i] != null) {if (names[i].equals(name) && pwds[i].equals(pwd)) {System.out.println("欢迎" + name + "来到桑榆商城");ci = 0; // 用于结束do...while循环}} elsebreak; // 用于结束登录for循环}//前面所有都没匹配上,才算作登录失败一次ci--;if (ci > 0)System.out.println("对不起,您的账户或密码错误,您还有" + ci + "次登录机会,请重新登录");else if(ci==0)System.out.println("对不起,您的账户或密码错误,您的登录机会已用完,请明日再来...");} while (ci > 0);break; // 用于跳出switch结构case 2:System.out.println("欢迎来到桑榆商城>>注册");System.out.println("请输入用户名:");String name = in.next();System.out.println("请输入密码:");String pwd = in.next();for (int i = 0; i < pwds.length; i++) {if(pwds[i]==null) {names[i] = name;pwds[i] = pwd;break;}else if(i==pwds.length-1) {System.out.println("用户已上限,无法注册");}}break;default://使用系统退出,直接退出系统System.out.println("欢迎下次光临!");System.exit(0);}}while(true);}
}

5.数组中常见的错误

public class ErrorArrayDemo {public static void main(String[] args) {// 常见错误//1.声明数组错误//静态初始化时,只需要元素,不需要填写长度
//		int[] nums = new int[5]{1,2,3,4,5,6};//静态初始化时,先声明,然后再直接复制错误
//		int[] num1;    //这种声明方式,是没有堆空间
//		num1 = {1,2,3,4,5,6,7};//空指针异常 NullPointerException//数组空指针异常
//		String[] strs = null;
//		System.out.println("strs数组中第一个元素为:"+strs[0]);//数组元素空指针异常,这里的5是数组的长度String[] strs1 = new String[5];
//		System.out.println(strs1[0].equals("admin"));//数组下标越界,这里的5是数组的下标strs1[5] = "张三";}
}

6.数组的复制

浅复制:被复制的数组和复制出来的数组拥有同一个地址,如果有操作行为,数组之间会互相影响

public class ShallowCopy {public static void main(String[] args) {int[] arr = {3,4,5};//要复制的数组int[] arr2 = arr;System.out.println("arr地址:" + arr);System.out.println("arr2地址:" + arr2);for (int i : arr) {System.out.println(i);}System.out.println("***************");for (int i : arr2) {System.out.println(i);}System.out.println("arr2[1]补改前:" + arr2[1] + ",arr[1]:" + arr[1]);System.out.println("__________________");arr2[1] = 33;System.out.println("arr2[1]补改后:" + arr2[1] + ",arr[1]:" + arr[1]);}
}

在这里插入图片描述

深复制:被复制的数组和复制出来的数组不是同一个地址,如果有操作行为,不会互相影响

public class DeepCopy {public static void main(String[] args) {//第一个数组int[] arr = {3,4,5};//重新定义一个数组int[] arr2 = new int[4];//这个新数组的长度可以跟第一个数组的长度不一样,可长可短//利用循环复制for(int i = 0;i < arr.length;i++) {/** 假设从第一个数组的获取到第一个元素的值赋值给新数组的第一个元素,以此类推* arr2[0] = arr[0];//第一个值* arr2[1] = arr[1];* arr2[2] = arr[2];* 循环赋值后 arr2[3,4,5,0]*/arr2[i] = arr[i];}System.out.println("arr地址:" + arr);System.out.println("arr2地址:" + arr2);for (int i : arr2) {System.out.println(i);}System.out.println("arr2[1]补改前:" + arr2[1] + ",arr[1]:" + arr[1]);System.out.println("__________________");arr2[1] = 33;System.out.println("arr2[1]补改后:" + arr2[1] + ",arr[1]:" + arr[1]);}
}

在这里插入图片描述

练习:定义一个数组求数组中的最大值和最小值

public class MaxMinNumDemo {public static void main(String[] args) {int[] arr = {3,5,39,-2};//定义一个最大数int max = arr[0];//定义一个最小数int min = arr[0];//循环中比较for (int i = 0; i < arr.length; i++) {//找这个数组的最大数,一一比较 if(arr[i] > max) {/** arr[0] > 3 ,不大于 ,arr[1] > 3,大于 ,把5赋值给max,arr[2]:第3次 比较  39>5,大			于,把39赋给max,2->39? */max = arr[i];}//找这个数组的每一个元素,一一比较/** 第1次:3跟3比,不大于* 第2次:3跟5,不大于* 第3次:3跟39比,不大于* 第4次:3跟-2比,大于,把-2赋值给min这个变量*/if(min > arr[i]) {min = arr[i];}}System.out.println("数组里面的最大值是:" + max);System.out.println("数组里面的最小值是:" + min);}
}

在这里插入图片描述

数组工具类

Arrays概念

​ Arrays是数组工具类,该类为数组提供了各种静态的帮助方法,用于操作数组

​ 静态修饰的方法,可以被类直接调用,不需要创建对象

​ 常见方法

方法名效果
sort(数组)对数组进行自然排序
toString(数组)对数组进行字符串打印
copyOf(数组,新的长度)用于复制数组,并设定长度形成新的数组

数组扩容

练习:输入学生成绩,实现数组的自动扩容

public class ArraysDemo {public static void main(String[] args) {Scanner in = new Scanner(System.in);int[] scores = new int[3];for (int i = 0; i < scores.length; i++) {System.out.println("请输入第"+(i+1)+"个学生成绩:");scores[i] = in.nextInt();}System.out.println("============输入成绩结束=============");//toStrng输出数组System.out.println("学生成绩为:"+Arrays.toString(scores));//排序Arrays.sort(scores);System.out.println("排序后的学生成绩:"+Arrays.toString(scores));System.out.println("===========继续输入成绩==============");int index = scores.length;  //记录下一次数组要存储数据的下标位置String choose = "";do {//判断一下,数组还有没有空间if(index>=scores.length) {//如果空间不够,就对数组进行扩容,复制原来的数组,并添加新的长度,重新赋值给scoresscores = Arrays.copyOf(scores, scores.length+2);System.out.println("=======扩容成功========");}System.out.println("请输入第"+(index+1)+"个学生成绩:");//index++  是对于下一个元素赋值的下标scores[index++] = in.nextInt();System.out.println("是否继续添加成绩(y继续):");choose = in.next();}while(choose.equals("y"));//再次排序输出Arrays.sort(scores);System.out.println("排序后的学生成绩:"+Arrays.toString(scores));}
}

二维数组

​简单理解: 二维数组就是数组中套数组,每一个一维数组的元素都是一个内层数组

在这里插入图片描述

语法: 数据类型[][] 数组名 = new 数据类型[一维长度][二维长度];静态语法数据类型[][] 数组名 = {{元素1,元素2...},{元素1,元素2....}....}

练习:使用二维数组,输入两名学生的信息并进行打印

public class TwoArray {public static void main(String[] args) {Scanner in = new Scanner(System.in);//使用二维数组存储学生信息, 编号,姓名,性别,年龄,学科,籍贯//1.创建二维数组String[][]  stus = new String[3][6];stus[0][0] = "编号";stus[0][1] = "姓名";stus[0][2] = "性别";stus[0][3] = "年龄";stus[0][4] = "学科";stus[0][5] = "籍贯";for (int i = 1; i < stus.length; i++) {for (int j = 0; j < stus[i].length; j++) {System.out.println("请输入学生"+stus[0][j]+":");stus[i][j] = in.next();}}//遍历数组for (int i = 0; i < stus.length; i++) {for (String str : stus[i]) {System.out.print(str+"\t");}System.out.println();}in.close();}
}

http://chatgpt.dhexx.cn/article/5N5AHX7q.shtml

相关文章

java输出数组(java输出数组)

多维数组在Java里如何创建多维数组&#xff1f; 这从第四个例子可以看出&#xff0c;它向我们演示了用花括号收集多个new表达式的能力&#xff1a; Integer[][] a4 { { new Integer (1), new Integer (2)}, { new Integer (3), new Integer (4)}, { new Integer (5), new…

java怎么输出数组(Java怎么给数组赋值)

Java中数组输出的三种方式。第一种方式,传统的for循环方式,第二种方式,for each循环,  第三种方式,利用Array类中的toString方法. 定义一个int类型数组,用于输出 int[] array={1,2,3,4,5}; 第一种方式,传统的for循环方式 for(int i=0;i {System.out.println(a[i]); } 第…

数组的输入与输出

前言&#xff1a; 我们知道对一个字符数组进行输入与输出时会用到&#xff1a; 输入&#xff1a;scanf,getchar,gets 输出&#xff1a;printf,putchar,puts 然而可能还有很多的朋友对这些还不是很了解&#xff0c;今天让我们共同学习数组的输入与输出吧。 %c格式是用于输入…

Java二维数组的输出

1. Java二维数组的输出<1> (1) 输出结果右对齐"%5d" public class HelloWorld {public static void main(String[] args){int myArray[ ][ ] { {1,2}, {7,2}, {3,4} };for(int i0; i<3; i){for (int j0; j<2; j)System.out.printf("%5d",my…

Java中数组的输入输出

数组的输入 首先声明一个int型数组 int[] a 或者 int a[] 给数组分配空间 anew int[10]; 和声明连起来就是int[] anew int[10]; 或者是 int a[]new int[10]; 给数组赋值 a[0]1;//0代表的是数组的第1个元素 ,元素下标为0 a[1]1;//1代表的是数组的第2个元素 ,元素下标为0 …

Java 数组的输入输出

Java中要对控制台进行输入操作的话要调用Scanner类&#xff0c;定义一个扫描的对象&#xff0c;例&#xff1a; //要导入java.util.Scanner; Scanner scanner new Scanner(System.in); 这样便打开了输入流&#xff0c;接下来定义数组&#xff1a; int[] n new int[4];//使…

Java中字符串数组的输入与输出

今天刷题遇到一个坑&#xff0c;老是接收不到字符串数组。即用str[i]sc.nextLine();这样的方式去接收数组的话&#xff0c;打印的时候总是会少一个。 import java.util.Scanner;public class test {public static void main(String[] args) {Scanner sc new Scanner(System.i…

java中打印输出数组内容的三种方式

今天输出数组遇到问题&#xff0c;学习一下打印输出数组内容的几种方式 错误示范&#xff1a;System.out.println(array);  //这样输出的是数组的首地址&#xff0c;而不能打印出数组数据。&#xff08;唉&#xff0c;我开始就是这么写的。。。&#xff09; 一维数组&#…

NTP协议之旅

NTP协议之旅 What---啥是NTPWhy---为什么需要NTPHow---NTP实现原理Do---NTP实战使用HCL 华三模拟器进行NTP配置抓包分析 What—啥是NTP NTP是在分布式网络中&#xff0c;进行时钟同步的协议&#xff0c;其具有较高的时间同步精度。所使用的传输层协议为UDP&#xff0c;使用端口…

ntrip协议

https://blog.csdn.net/wandersky0822/article/details/88558456这篇介绍的是RTK精确定位的原理&#xff0c;及影响精确定位的各种条件。 这一篇介绍的就比较细&#xff0c;仅仅介绍RTK 差分信息的 产生 申请与分发。 最近要做一个GPS RTK基站&#xff0c;也就是为RTK客户端提…

Ntrip协议简介

Ntrip通讯协议1.0 1 什么是Ntrip&#xff1f; CORS&#xff08;Continuously Operating Reference Stations&#xff09;就是网络基准站&#xff0c;通过网络收发GPS差分数据。用户访问CORS后&#xff0c;不用单独架设GPS基准站&#xff0c;即可实现GPS流动站的差分定位。 访问…

NTP技术介绍

NTP 简介 NTP&#xff08;Network Time Protocol&#xff0c;网络时间协议&#xff09;是由RFC 1305定义的时间同步协议&#xff0c;用来在分布式时间服务器和客户端之间进行时间同步。NTP基于UDP报文进行传输&#xff0c;使用的UDP端口号为123。 使用NTP的目的是对网络内所…

NTPv4协议解析

前言 本文的撰写基于RFC5905.NTP 是时间网络控制协议&#xff0c;V4版本相交V3版本&#xff0c;修复了V3存在的一些问题。尤其是NTPV4的拓展时间戳鼓励使用浮动双数据类型&#xff0c;这样使得NTP能够更好的支持1ns的场景&#xff0c;轮询间隔也从上一代的最多1024s拓展到了36…

NTP 网络时间协议

目录 基本原理 结构 工作模式 单播C/S模式 对等体模式 广播模式 组播模式 多播模式 NTP访问控制 访问权限 KOD 认证功能 配置 NTP用于在一系列分布式时间服务器与客户端之间同步时钟。基于IP和UDP。NTP报文通过UDP传输&#xff0c;端口号是123. NTP主要应用于网络中…

NTP协议简介

NTP协议简介 一. datec dates分析1. 同步流程2. 缺陷 二. NTP(**Network Time Protocol**)1. NTP概述 [1、2、3、7]2. NTP的时钟同步原理与授时精度分析 [3、1、10]NTP的时钟同步原理NTP的授时精度分析 3. NTP中其它的提高授时精度的措施[1、6]参考资料 三. 对NTP改进以获得更高…

ntp同步详解

一、ntp服务是什么 1.定义 NTP是网络时间协议(Network Time Protocol)&#xff0c;它是用来同步网络中各个计算机的时间的协议。 2.发展 首次记载在Internet Engineering Note之中&#xff0c;其精确度为数百毫秒。 稍后出现了首个时间协议的规范RFC-778&#xff0c;它被命…

NTP协议代码实现

本文将讲解NTP的代码实现和调试过程的一些记录。 首先&#xff0c;进行NTP报文结构体的构建。 //宏定义 #define NTP_TIMESTAMP_DELTA 2208988800ull //number of seconds between 1900 and 1970&#xff0c;1900-1970的时间差 #define SEC_TIME_ZONE (8*60*60) //B…

什么是Ntrip?Ntrip协议简介

文章目录 Ntrip通讯协议1.0Ntrip是什么&#xff1f;Ntrip系统组成NtripServerNtripClient4.1 获取源列表4.2 获取差分数据 其他资料 Ntrip通讯协议1.0 Ntrip是什么&#xff1f; NTRIP是在互联网上进行RTK数据传输的协议。所有的 RTK数据格式&#xff08;NCT&#xff0c;RTCM&…

网络时间协议NTP介绍

定义 网络时间协议NTP&#xff08;Network Time Protocol&#xff09;是TCP/IP协议族里面的一个应用层协议。NTP用于在一系列分布式时间服务器与客户端之间同步时钟。NTP的实现基于IP和UDP。NTP报文通过UDP传输&#xff0c;端口号是123。 目的 随着网络拓扑的日益复杂&#xf…

计算机网络中网络时间协议NTP是什么原理?

NTP是网络时间协议(Network Time Protocol)&#xff0c;它是用来同步网络中各个计算机的时间的协议。在计算机的世界里&#xff0c;时间非常地重要&#xff0c;例如对于火箭发射这种科研活动&#xff0c;对时间的统一性和准确性要求就非常地高&#xff0c;是按照A这台计算机的时…