5.Java入门笔记--数组

news2024/11/23 18:57:04

数组就是一个容器,用来存储一批同种类型的数据。

1.静态初始化数组

定义数组的时候直接给数组赋值。

静态初始化数组的格式:

//完整格式
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
int [] ages = new int[]{12,24,36}
double[] scores = new double[]{89.9,99.5,59.5,88.0};
//简化格式
数据类型[] 数组名 = {元素1,元素2,元素3....};
itn [] ages = {12,24,36};

注意:

  • 数据类型[ ] 数组名 = 数据类型 数组名[ ]
  • 什么类型的数组只能存放什么类型的数据
package item6;

import java.util.Random;

public class Array1 {
public static void main(String[] args) {
	//数组的应用:掌握数组的定义方式一:静态初始化数组
	 //1.数据类型[] 数组名 = new 数据类型[] {元素1,元素2,元素3....}
	int[] ages = new int[] {12,24,36};//存储三个数组的年龄
	
	double[] scores = new double[] {89.9,99.5,59.5,88};
	
	//2.简化写法
	//数据类型[] 数组名 ={元素1,元素2,元素3....}
	int[] ages2 = {12,15,52};
	
	double[] scores2 = {89.9,99.5,88};
	
	//3.数据类型[ ] 数组名 = 数据类型 数组名[ ]
	int age3[] = {22,58,54};
}
}

注意:数组变量名中存储的是数组在内存中的地址,数组是一种引用数据类型

1.1.数值的访问

数组名[索引]

//取值
System.out.println(arr[0]);
//赋值
arr[2] = 100;
System.out.println(arr[2]);//100

数组的长度属性:length

//获取数组的长度(就是数组元素的个数)
System.out.println(arr.length);//3

1.2.数组的遍历

就是一个一个数据的访问。

package item6;

import java.util.Random;

public class Array1 {
public static void main(String[] args) {
	int[] ages4 = {12,24,36};
	//System.out.println(ages4[0]);
	//System.out.println(ages4[1]);
	//System.out.println(ages4[2]);
	
	for(int i = 0;i < 3;i++) {
		System.out.println(ages4[i]);	
	}
	
}
}

求和案例

需求:某部门5名员工的销售额分别是:16、26、36、6、30。

分析:

  1. 把这五个数据拿到程序中去--->使用数组
  2. 遍历数组中的每个数据,然后在外面定义求和变量把它们累加起来。
package item7;

public class ArrayTest4 {
public static void main(String[] args) {
	//目标:完成对数组的元素求和
	//1、定义一个数组存储5名员工的销售额
	int[] money = {16,26,36,6,100};
	
	//2、遍历这个数组中的每个数据
	
	//3、定义夜歌变量用于累加求和
	int sum = 0;
	for(int i = 0; i<money.length;i++) {
		sum += money[i];
		
	}
	System.out.println(sum);
}
}

2.动态初始化数组

定义数组是先不存入具体的元素值,只确定数组存储的数据类型和数组的长度

2.1.数组初始化的格式

数据类型[] 数组名 = new 数据类型[长度];
int[] arr = new int[3];

注意:静态初始化和动态初始化数组的写法是独立的,不可以混用。

错误写法:

int[] arr = new int[3]{30,40,50};//错误

2.1.1.动态初始化数组元素默认值规则:

数据类型明细默认值
基本类型byte、short、char、int、long0
基本类型float、double0.0
基本数据类型booleanfalse
引用类型类、接口、数组、Stringnull

2.2.打分案例

需求:某歌唱比赛,需要开发一个系统:可以录入6名评委的打分,录入完毕后立即输出平均分作为选手分数。

分析:

  1. 6名评委打分时后期录入的,一开始不知道具体的分数,因此定义一个动态初始化的数组存分数。
  2. 遍历数组中的每一个位置,每次提醒用户录入一个评委的分数,并存入到数组对应的位置。
  3. 遍历数组中的每个元素进行求和,最终算出平均分打印出来即可。
package item8;

import java.util.Scanner;

public class ArrayTest5 {
public static void main(String[] args) {
	//需求:某歌唱比赛,需要开发一个系统:可以录入6名评委的打分,录入完毕后立即输出平均分作为选手分数。
	//1、定义一个动态初始化的数组,负责后期储存6个评委的打分
	
	double[] scores = new double[6];
	
	Scanner sr = new Scanner(System.in);
	//2.遍历数组中的每个位置,录入评委的分数,存入到数组中去
	
	for (int i = 0;i <6;i++) {
		System.out.println("请您输入当前第" + (i + 1)+ "个评委的分数:");
		double score = sr.nextDouble();
		scores[i] = score;
	}
	//3、遍历数组中的元素求和
	
	double sum = 0;
	for(int i = 0;i < scores.length;i++) {
		sum += scores[i];
		
	}
	
	System.out.println("选手的最终得分是:" + sum/scores.length );
}
}

运行效果:

3.内存执行原理

Java内存分配介绍:

  1. 方法区
  2. 本地方法栈
  3. 程序计数器

3.1.方法区

字节码文件先加载到这里(放程序编译后的.class文件)

3.2.栈内存

方法运行时所进入的内存变量也是在这里(main...等)

3.3.堆内存

new(数组) 出来的东西会在这块内存中开辟空间并产生地址

例:说说int a = 20;int[] = new int[3]这两行代码的执行原理?

  • a是变量,直接放在栈中,a变量中存储的数据就是20这个值。
  • new int[3]是创建一个数组对象,会在堆内存中开辟区域存储3个整数。
  • arr是变量,在栈中,arr中存储的是数组对象在堆内存中的地址值。

注意:如果某个数组变量存储的地址是null,那么该变量将不再指向任何数组对象

arr2 = null;//把null赋值给arr2
System.out.println(arr2);//null
System.out.println(arr2[0]);//异常
System.out.println(arr2.length);//异常

4.求最值案例

需求:找出分数最低和最高的

步骤:

  1. 把分数数据拿到程序中去,用数组装起来。
  2. 定义一个变量用于记录最终的最大值
  3. 遍历替换
package item9;

public class MaxRequire {
public static void main(String[] args) {
	int[] scores = {15,32,57,98,-5};
	int MaxScores = scores[0];
	for(int i = 1; i < scores.length;i++) {
		if(scores[i] > MaxScores) {
			MaxScores = scores[i];
		}
	}
	System.out.println("最大的数是:" + MaxScores);
}
}

运行效果是:

5.数组反转

需求:某个数组有五个数据:10,20,30,40,50,请将这个数组中的数据进行反转。

[10,20,30,40,50]反转后[50,40,30,20,10]

分析:

  • 数组反转操作实际上就是:依次前后交换数据即可实现。
package item10;

public class ArrayFlip {
public static void main(String[] args) {
	//目标:完成数组反转
	//1、准备一个数组
	int[] numbers = {10,20,30,40,50};
	
	//2、定义一个循环,设计2个变量,一个在前,一个在后
	for(int i = 0,j = numbers.length - 1;i < j;i++,j--) {
		
		//numbers[i]                   numbers[j]
		//交换
		//1、定义一个临时变量记住后一个位置处的值
		int temp = numbers[j];
		//2、把前一个位置处的值赋值个后一个位置了
		numbers[j] = numbers[i];
		//3、把临时变量中记住的后一个位置处的值赋值给前一个位置处
		numbers[i] = temp;
	}
	
	//3、遍历数组中的每个数据,看是否反转成功了
	for(int i = 0;i < numbers.length;i++) {
		System.out.print(numbers[i] + " ");
	}
}
}

运行效果:

6.随机排名

需求:用户依次录入几个序号,然后展示出一组随机的排名顺序

分析:

  • 在程序中录入几个数字存储起来-->使用动态初始化数组的方式。
  • 依次遍历数组中的每个数据。
  • 没遍历到一个数据,都随机一个索引值出来,让当前数据与该索引位置处的数据进行交换。
package item11;

import java.util.Random;
import java.util.Scanner;

public class RandomNumber {
public static void main(String[] args) {
	//完成随机排名
	//1、定义一个动态初始化的数组用于存储5个数据
	int[] numbers = new int[5];
	
	//2、提示用户录入数据
	Scanner sr = new Scanner(System.in);
	for(int i = 0;i < numbers.length;i++) {
		System.out.println("请输入当前第" + (i + 1) + "个数据");
		int number = sr.nextInt();
		numbers[i] = number;
	}
	
	//3、打乱数组中元素顺
	Random r= new Random();
	for(int i = 0;i < numbers.length;i++) {
		//numbers[i]
		//每遍历到一个数据,都随机一个数组索引范围内的值,然后让当前遍历的数据与
	 int code =  r.nextInt(numbers.length);//0 - 4
	 //定义一个临时变量记住code的位置
	 int temp = numbers[code];
	 numbers[code] = numbers[i];
	}
	for(int i = 0;i < numbers.length;i++) {
		System.out.println(numbers[i] + " ");
	}
}
}

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

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

相关文章

SSM学习 day02

一、vue项目开发流程 vue根组件 <template><div><h1>{{ message }}</h1><element-view></element-view></div> </template><script> import ElementView from ./views/Element/ElementView.vue export default {compon…

OpenGL入门003——使用Factory设计模式简化渲染流程

前面两节已经学会了如何使用opengl创建窗口并绘制三角形&#xff0c;我们可以看出有些步骤是固定的&#xff0c;而且都写在main.cpp&#xff0c;这一节我们将了解如何使用Factroy设计模型。将模型渲染逻辑封装在一个单独的类中&#xff0c;简化开发流程&#xff0c;且提高代码复…

【CSS/SCSS】@layer的介绍及使用方法

目录 基本用法layer 的作用与优点分离样式职责&#xff0c;增强代码可读性和可维护性防止无意的样式冲突精确控制样式的逐层覆盖提高复用性 兼容性实际示例&#xff1a;使用 import 管理加载顺序实际示例&#xff1a;混入与 layer 结合使用 layer 是 CSS 中用于组织和管理样式优…

PHP反序列化原生类字符串逃逸框架反序列化利用

PHP反序列化 概念 序列化的原因&#xff1a;为了解决开发中数据传输和数据解析的一个情况(类似于要发送一个椅子快递&#xff0c;不可能整个椅子打包发送&#xff0c;这是非常不方便的&#xff0c;所以就要对椅子进行序列化处理&#xff0c;让椅子分成很多部分在一起打包发送…

红队-shodan搜索引擎篇

如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 一.shodan原理与功能的介绍 Shodan Search Engine 它是专门搜网络设备的,只要联网的,只要有IP地址的都可以称为网络设备 1.shodan&#x…

synchronized进阶原理

synchronized进阶原理 1.轻量级锁 轻量级锁的使用场景:如果一个对象虽然有多个线程访问,但多线程访问的时间是错开的(也就是没有竞争),那么可以使用轻量级锁来优化(如果出现竞争,操作系统会将轻量级锁升级为重量级锁)。轻量级锁对使用者是透明的(由操作系统控制),即语法仍是s…

JavaWeb——Web入门(3/9)-HTTP协议:概述(概念、特点,HTTP协议定义,基于 TCP 协议,基于请求-响应模型)

目录 概念 特点 内容预告 概念 HTTP 协议定义&#xff1a;全称 Hyper Text Transfer Protocol&#xff0c;即超文本传输协议&#xff0c;规定了浏览器与服务器之间数据传输的规则&#xff0c;具体指客户端浏览器与服务器之间进行数据交互的数据格式。 在互联网的世界中&…

Altium Designer使用技巧(二)

一、创建类 1、按DC键&#xff0c;打开对象类。 2、右键添加一个类。命名为PWR。 3、将所有的电源类&#xff0c;全部添加到新创建的类中&#xff0c;从非成员类中点选到成员类中。 4、右下角点panes ,点PCB。 5、然后在左边单击PWR&#xff0c;点连接&#xff0c;可显示或…

边缘计算【智能+安全检测】系列教程--agx orin解决RTC时间问题

因为是离线运行&#xff0c;首要问题是时间不准确&#xff0c;就在主板上加装了纽扣电池&#xff0c;但是会有一系列问题&#xff0c;比如无法将RTC时间回写到系统时间&#xff0c;或者无法将系统时间写到RTC中等等一些列问题。为解决这些问题&#xff0c;一劳永逸的方式&#…

React中常用的hook函数(二)——useReducer和useContext

React中常用的hook函数(一)——useState和useEffect_usestate useeffect-CSDN博客https://blog.csdn.net/Mrs_Lupin/article/details/142905749?sharetypeblogdetail&sharerId142905749&sharereferPC&sharesourceMrs_Lupin&spm1011.2480.3001.8118React中常用…

Java项目实战II基于Java+Spring Boot+MySQL的智能推荐的卫生健康系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 基于Java、…

《Linux系统编程篇》消息队列(Linux 进程间通信(IPC))——基础篇

文章目录 引言消息队列&#xff08;Message Queue&#xff09;消息队列的特点消息队列的特性消息队列的操作ipcs -q 拓展ipcrm 拓展注意事项 结论 “山重水复疑无路&#xff0c;柳暗花明又一村。” ——陆游 引言 《Linux系统编程篇》——基础篇首页传送门 想象一下&#xff0…

微服务设计模式 - 重试模式(Retry Pattern)

微服务设计模式 - 重试模式&#xff08;Retry Pattern&#xff09; 定义 重试模式&#xff08;Retry Pattern&#xff09;是一种微服务中的设计模式&#xff0c;用于在临时性失败&#xff08;如网络故障或暂时不可用的服务&#xff09;发生时&#xff0c;自动重新尝试请求&…

『 Linux 』网络传输层 - TCP(二)

文章目录 TCP六个标志位TCP的连接三次握手 四次挥手为什么是三次握手和四次挥手 重传机制 TCP六个标志位 在TCP协议报文的报头中存在一个用于标志TCP报文类型的标志位(不考虑保留标志位),这些标志位以比特位选项的方式存在,即对应标志位为0则表示为假,对应标志位为1则为真; SYN…

VLAN虚拟局域网,eNSP实验讲解

VLAN虚拟局域网&#xff0c;eNSP实验讲解 一、概念二、eNSP仿真实验1、实验一&#xff1a;vlan演示&#xff08;交换机端口access模式&#xff09;2、实验二&#xff1a;vlan演示&#xff08;交换机端口trunk模式&#xff09; 一、概念 VLAN&#xff08;Virtual Local Area Ne…

Ubuntu UFW防火墙规则与命令示例大全

在服务器安全领域&#xff0c;防火墙是守护网络安全的坚实盾牌。UFW&#xff08;Uncomplicated Firewall&#xff09;&#xff0c;即“不复杂的防火墙”&#xff0c;是一个运行在iptables之上的防火墙配置工具&#xff0c;它为Ubuntu系统默认提供了一个简洁的命令行界面&#x…

基于 Python 的 Django 框架开发的电影推荐系统

项目简介&#xff1a;本项目是基于 Python 的 Django 框架开发的电影推荐系统&#xff0c;主要功能包括&#xff1a; 电影信息爬取&#xff1a;获取并更新电影数据。数据展示&#xff1a;提供电影数据的列表展示。推荐系统&#xff1a;基于协同过滤算法实现个性化推荐。用户系…

ORB-SLAM2源码学习:ORBextractor.cc:IC_Angle 利用灰度质心法求解关键点方向角

ORB特征点&#xff1a; 特征点是由关键点和描述子两部分组成&#xff0c;关键点是指特征点在图像中的位置&#xff0c;描述子是用来描述关键点周围的像素信息。ORB关键点是在FAST关键点的基础上进行改进给像素增加了一个主方向&#xff0c;称为Oriented FAST。描述子在BRIEF的…

【设计模式】如何用C++实现依赖倒置

【设计模式】如何用C实现依赖倒置 一、什么是依赖倒置&#xff1f; 依赖倒置原则&#xff08;Dependency Inversion Principle&#xff0c;DIP&#xff09;是SOLID面向对象设计原则中的一项。它的核心思想是&#xff1a; 高层模块不应该依赖于低层模块&#xff0c;两者都应该…