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();// ...
随机推荐
- 17.Nginx 重写(location rewrite)
Nginx 重写(location / rewrite) 目录 Nginx 重写(location / rewrite) 常见的nginx正则表达式 location lication的分类 loca ...
- 物联网?快来看 Arduino 上云啦
作者:HelloGitHub-Anthony 这里是 HelloGitHub 推出的讲解开源硬件开发平台 Arduino 的系列教程. 第一篇:Arduino 介绍和开发环境搭建 第二篇:制作温湿度显 ...
- 面试突击61:说一下MySQL事务隔离级别?
MySQL 事务隔离级别是为了解决并发事务互相干扰的问题的,MySQL 事务隔离级别总共有以下 4 种: READ UNCOMMITTED:读未提交. READ COMMITTED:读已提交. REP ...
- P2575 高手过招 题解
题目描述 我们考虑如何把问题转换成博弈论来求解. 我们对于每一行之前都加上一个空格. 设原来这一行的空格个数是 \(C\) ,那么此时空格个数变成 \(C + 1\) . 然后按照从左到右的顺序给每一 ...
- Android 12(S) 图像显示系统 - drm_hwcomposer 简析(下)
必读: Android 12(S) 图像显示系统 - 开篇 合成方式 合成类型的定义:/hardware/interfaces/graphics/composer/2.1/IComposerClien ...
- 数据结构-查找-二叉排序查找(平衡二叉树,B树,B+树概念)
0.为什么需要二叉排序树 1)数组存储方式: 优点:通过下标访问元素,速度快,对于有序数组,可以通过二分查找提高检索效率: 缺点:如果检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低: 2 ...
- P1087 FBI树 [2004普及]
这是个正常的.很简单的分治,然后我成功地将这个题搞成了一个贼难搞的东西 还是说一下我那个非常麻烦的思路: 1. 建树 2. 后序遍历 然后就在建树的过程中死循环了,然后还一堆毛病 看了一个AC代码,该 ...
- Kafka 部署完在服务器端可以访问,而在外部其它电脑访问不了
Kafka 部署完在服务器端可以访问,而在外部其它电脑访问不了 原因:config/server.properties的listeners和advertised.listeners 不配置的话默认的l ...
- idea 分 环境 配置 线上 测试 本地
在resources 新建application.properties 分开在resources 新建的多个环境的文件 #测试环境 applicaion-test.properties #开发环境 a ...
- 牛客SQL刷题第三趴——SQL必知必会
01检索数据 SQL60 从 Customers 表中检索所有的 ID 编写 SQL 语句,从 Customers 表中检索所有的cust_id select * from Customers; SQ ...