Java中数组
数组的定义格式:
1: 数据类型[] 数组名
2: 数据类型 数组名
动态初始化: 初始化的时候 系统会默认给数组赋值
数据类型[] 变量名 = new 数据类型[数组长度]
int[] arr = new int[3]
数组索引:
数组名[索引]
Java内存分配
栈内存:方法运行时,进入的内存,局部变量都存放于这块内存当中
堆内存:new出来的内存都会进入堆内存 并且会存在地址值
方法区:字节码文件(.class)加载时进入的内存
本地方法栈:调用操作系统相关资源
寄存器:交给CPU去使用
java中数组的内存分配
- 1、程序运行时 先把字节码文件加载到方法区中 main方法存放在字节码文件中
- 2、main方法被JVM自动调用进入栈内存执行
- 3、arr数组变量在main方法中声明
- 4、new int[3]
- 通过new关键字在堆内存中开辟空间
- 产生地址值,因为new的是长度为3的数组所以会划分出3块小格子
- 每个格子都有自己的索引和默认初始化值
- 5、将地址值赋给main方法中的arr变量
- 通过地址值找堆中的空间位置 索引值找数组中的位置


静态初始化:
初始化时就可以指定数组要存储的元素,系统还会自动计算出该数组的长度
格式: 数据类型[] 变量名 = new 数据类型[]{数据1,数据2,数据3,....};
int[] arr = new int[]{1,2,3};
简化格式:
int[] arr = {1,2,3};
数组两种初始化
- 动态初始化:只明确元素个数,不明确具体数值 推荐使用动态初始化
- 静态初始化:需求中已经明确了要操作的具体操作
数组中的两个小问题
- 索引越界 : 访问了数组中不存在的索引对应的元素 造成索引越界问题
- 空指针:访问的数组已经不再指向堆内存的数据 造成空指针异常
数组中的常见操作
遍历
public static void main(String[] args) {
int[] arr = new int[]{1,2,3};
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
int[] arr1 = {1,2,3};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
//arr.length 数组的个数
获取最值
public class getarrMax {
public static void main(String[] args) {
int[] arr = {132,34,4325,432,5,3,23,4332};
//1.假设数组中第一个最大
int max = arr[0];
//2 遍历比较
for (int i = 0; i < arr.length; i++) {
//3 交换
if(arr[i] > max){
max = arr[i];
}
}
System.out.println(max);
}
数组元素求和
public class arr_sum {
public static void main(String[] args) {
//1.创建键盘录入对象 准备键盘录入
Scanner sc = new Scanner(System.in);
//2.定义求和变量
int sum = 0;
//3.动态初始化一个数组
int[] arr = new int[5];
//4.键盘录入
for (int i = 0; i < arr.length; i++) {
System.out.println("请输入第"+(i+1)+"个整数:");
arr[i] = sc.nextInt();
}
//遍历数组 取出每一个元素 求和
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
System.out.println("sum:"+sum);
}
}
//1.创建键盘录入对象 准备键盘录入
Scanner sc = new Scanner(System.in);arr[i] = sc.nextInt(); //获取键盘输入
arr.fori 快捷键
注意一个for循环实现一个业务逻辑
查找
- 需求:已知一个数组arr={19,28,37,46,50};键盘录入一个数据,查找该数据在数组中的索引,并在控制台输出找到的索引值。
- 步骤:
- 1、定义一个数组,用静态初始化完成数组元素的初始化
- 2、键盘录入要查找的数据,用一个变量接收
- 3、定义一个索引变量,初始值为-1
- 4、遍历数组,获取数组中的每一个元素
- 5、拿键盘录入的数据和数组中的每一个元素进行比较如果值相同,就把该值对应的索引赋值给索引变量,并结束循环
- 6、输出索引变量
public class find_number {
public static void main(String[] args) {
int[] arr = {19,28,37,46,50};
int a = 0; //输入变量
int k =-1;//索引变量 假设不存在
Scanner sc = new Scanner(System.in);
System.out.println("请输入要查找的数字:");
a = sc.nextInt();//可直接定义一个 int num = sc.nextInt();
for (int i = 0; i < arr.length; i++) {
if (a == arr[i]){
k = i;
break;//注意要提高效率
}
}
System.out.println("索引为:"+(k));
}
案例
- 需求:在编程竞赛中,有6个评委为参赛选手打分,分数为0-100的整数分
选手的最后得分为:去掉一个最高分和一个最低分后的4个评委的平均值(不考虑小数部分)
package com.demoli.arr2;
import java.util.Scanner;
public class GetScore {
public static void main(String[] args) {
int[] score_arr = new int[6];
Scanner sc = new Scanner(System.in);
for (int i = 0; i < score_arr.length; i++) {
System.out.println("请输入分数(0-100):");
int score = sc.nextInt();
if (score >= 0 && score <=100) {
score_arr[i] = score;
}else{
//非法
System.out.println("打分有误");
i--; //神来之笔
}
}
int max = score_arr[0];
for (int i = 0; i < score_arr.length; i++) {
if (max < score_arr[i]){
max = score_arr[i];
}
}
int min = score_arr[0];
for (int i = 0; i < score_arr.length; i++) {
if (min > score_arr[i]){
min = score_arr[i];
}
}
int sum = 0;
for (int i = 0; i < score_arr.length; i++) {
sum += score_arr[i];
}
int avg = (sum - max - min) / 4;
System.out.println(avg);
}
}
Java中数组的更多相关文章
- java中数组的相关知识
1. 2.数组的命名方法 1)int[]ages=new int[5]; 2) int[]ages; ages=new int[5]; 3)int[]ags={1,2,3,4,5}; 4)int[ ...
- Java中数组的特性
转载:http://blog.csdn.net/zhangjg_blog/article/details/16116613 数组是基本上所有语言都会有的一种数据类型,它表示一组相同类型的数据的集合,具 ...
- 在java 中,数组与 List<T> 类型的相互转换
在java中,数组与List<T> 之前进行互相转换,转换方法可总结为以下几种: 一. 将 数组转换成List<T> 1. 使用 Collections 的addAll 方法 ...
- Java中数组的初始化方式
Java中数组的初始化方式 初始化方式有两种: 1.静态初始化:初始化时由程序猿显式指定每一个数组元素的初始值,由系统指定数组长度 2.动态初始化:初始化时由程序猿仅仅指定数组长度,由系统为数组 ...
- java中数组复制的两种方式
在java中数组复制有两种方式: 一:System.arraycopy(原数组,开始copy的下标,存放copy内容的数组,开始存放的下标,需要copy的长度); 这个方法需要先创建一个空的存放cop ...
- Java中数组的插入,删除,扩张
Java中数组是不可变的,但是可以通过本地的arraycop来进行数组的插入,删除,扩张.实际上数组是没变的,只是把原来的数组拷贝到了另一个数组,看起来像是改变了. 语法: System.arrayc ...
- java中数组、集合、字符串之间的转换,以及用加强for循环遍历
java中数组.集合.字符串之间的转换,以及用加强for循环遍历: @Test public void testDemo5() { ArrayList<String> list = new ...
- Java 中数组的内存分配
Java 中数组的内存分配 1.Java 程序在运行时,需要在内存中分配空间.为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据和内存管理方式. 2.数组基本概念 数组是 ...
- 将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)
方法一:使用Arrays.asList()方法 1 2 String[] asset = {"equity", "stocks", "gold&q ...
- 【Java面试题】18 java中数组有没有length()方法?string没有lenght()方法?下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";
数组没有length()这个方法,有length的属性.String有有length()这个方法. int a[]; a.length;//返回a的长度 String s; s.length();// ...
随机推荐
- k8s client-go源码分析 informer源码分析(6)-Indexer源码分析
client-go之Indexer源码分析 1.Indexer概述 Indexer中有informer维护的指定资源对象的相对于etcd数据的一份本地内存缓存,可通过该缓存获取资源对象,以减少对api ...
- Spring框架系列(6) - Spring IOC实现原理详解之IOC体系结构设计
在对IoC有了初步的认知后,我们开始对IOC的实现原理进行深入理解.本文将帮助你站在设计者的角度去看IOC最顶层的结构设计.@pdai Spring框架系列(6) - Spring IOC实现原理详解 ...
- Linux字符集和编码
计算机内部,所有信息最终都是一个二进制值形式存放 字符集 字符集:charset是character set的简写,即二进制和字符的对应关系,不关注最终的存储形式 编码 字符集编码:encoding是 ...
- 动画 ---Animejs 简单使用与源码解析
Anime是什么 Anime有什么用 Anime是作何做的 requireAnimationFrame() engine(){ // 处理让多个帧运动起来 play() step()} ani ...
- Git的历史和安装Git及环境配置
Git历史同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代. Linux 内核开源项目有着为数众广的参与者.绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务 ...
- Java8 函数式【1】:一文读懂逆变
Java8 函数式[1]:一文读懂逆变 禁止转载 pure function 协变 逆变 Java8 引入了函数式接口,从此方法传参可以传递函数了,有人说: 不就是传一个方法吗,语法糖! lambda ...
- vue封装原生的可预览裁剪上传图片插件H5,PC端都可以使用
思路:1.先做出一个上传的图片的上传区 <!-- 上传区 --> <label for="fileUp"> <div class="upBo ...
- FastASR——PaddleSpeech的C++实现
FastASR 基于PaddleSpeech所使用的conformer模型,使用C++的高效实现模型推理,在树莓派4B等ARM平台运行也可流畅运行. 项目简介 本项目仅实现了PaddleSpeech ...
- 通过jmeter压测surging
前言 surging是异构微服务引擎,提供了模块化RPC请求通道,引擎在RPC服务治理基础之上还提供了各种协议,并且还提供了stage组件,以便针对于网关的访问, 相对于功能,可能大家更想知道能承受多 ...
- 动手实践丨手把手教你用STM32做一个智能鱼缸
摘要:本文基于STM32单片机设计了一款基于物联网的智能鱼缸. 本文分享自华为云社区<基于STM32+华为云IOT设计的物联网鱼缸[玩转华为云]>,作者: DS小龙哥 . 1. 前言 为了 ...