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();// ...
随机推荐
- 聊聊Adapter模式
今天我们聊一个最简单的设计模式,适配器Adapter.跟以往一样,我们还是从一个例子出发. 一个例子 最开始的结构 假设我们有个数据分析软件,其中包含了数据收集器和数据分析器,数据收集器基于XML格式 ...
- 毕设着急了吧?Python股票数据分析,制作动态柱状图
写在前面的一些屁话: 雪球成立于 2010 年,是北京雪球信息科技有限公司旗下推出的投资者社区.雪球一直致力于为中国投资者提供跨市场(沪深.香港.美国),跨品种(股票.基金.债券等)的数据查询.资讯获 ...
- Docker安装Portainer管理工具
1.下载镜像 docker pull portainer/portainer 2.启动 docker run -d -p 9000:9000 --restart=always -v /var/run/ ...
- 本地拉取服务器上的项目,SVN 由于目标计算机积极拒绝 无法连接失败
下面几种解决方案一定一定一定都要试一下哈, 比如,如果你的SVN没有启动,并且防火墙也开启了,那么你即便启动了SVN,也是无法拉取项目的,需要把防火墙也关闭. 1.是否启动了svn 输入命令查看是否启 ...
- 抓到Dubbo异步调用的小BUG,再送你一个贡献开源代码的机会
hello,大家好呀,我是小楼. 最近一个技术群有同学at我,问我是否熟悉Dubbo,这我熟啊~ 他说遇到了一个Dubbo异步调用的问题,怀疑是个BUG,提到BUG我可就不困了,说不定可以水,哦不.. ...
- gnet: 一个轻量级且高性能的 Go 网络框架 使用笔记
一个偶然的机会接触到了golang,被它的高并发传说所吸引,就开始学这门语言,越学感觉越有意思^_^ 注册了博客园这么多年,第一次写东西,年纪大了,脑子不好使了,就得写下来,记下来,为了自己以后查阅, ...
- osx系统使用技巧 -- 虚拟机virtualbox
p.p1 { margin: 0; font: 18px Menlo; color: rgba(255, 255, 255, 1); background-color: rgba(102, 130, ...
- 常用类-Instant、DateTimeFormatter类的使用
一.Instant 我们所处的时间点是在东八区,Java中Instant所计算出来的时间是按本初子午线的时间来算的,与我们的时间相差8个小时,也就是说当我的北京时间是上午九点时,本初子午线的时间是凌晨 ...
- war包解压与压缩
解压:jar -xvf ROOT.war 压缩:jar -cvfM0 ROOT.war ./
- 云ATM架构设计
云ATM架构设计 启动程序(Start.java) public class Start { public static void main(String[] args) { MainView vie ...