数组的定义格式:
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中数组的更多相关文章

  1. 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[ ...

  2. Java中数组的特性

    转载:http://blog.csdn.net/zhangjg_blog/article/details/16116613 数组是基本上所有语言都会有的一种数据类型,它表示一组相同类型的数据的集合,具 ...

  3. 在java 中,数组与 List<T> 类型的相互转换

    在java中,数组与List<T> 之前进行互相转换,转换方法可总结为以下几种: 一. 将 数组转换成List<T> 1. 使用 Collections 的addAll 方法 ...

  4. Java中数组的初始化方式

    Java中数组的初始化方式    初始化方式有两种: 1.静态初始化:初始化时由程序猿显式指定每一个数组元素的初始值,由系统指定数组长度 2.动态初始化:初始化时由程序猿仅仅指定数组长度,由系统为数组 ...

  5. java中数组复制的两种方式

    在java中数组复制有两种方式: 一:System.arraycopy(原数组,开始copy的下标,存放copy内容的数组,开始存放的下标,需要copy的长度); 这个方法需要先创建一个空的存放cop ...

  6. Java中数组的插入,删除,扩张

    Java中数组是不可变的,但是可以通过本地的arraycop来进行数组的插入,删除,扩张.实际上数组是没变的,只是把原来的数组拷贝到了另一个数组,看起来像是改变了. 语法: System.arrayc ...

  7. java中数组、集合、字符串之间的转换,以及用加强for循环遍历

    java中数组.集合.字符串之间的转换,以及用加强for循环遍历: @Test public void testDemo5() { ArrayList<String> list = new ...

  8. Java 中数组的内存分配

    Java 中数组的内存分配 1.Java 程序在运行时,需要在内存中分配空间.为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据和内存管理方式. 2.数组基本概念 数组是 ...

  9. 将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)

    方法一:使用Arrays.asList()方法   1 2 String[] asset = {"equity", "stocks", "gold&q ...

  10. 【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();// ...

随机推荐

  1. Spring Security自定义认证器

    在了解过Security的认证器后,如果想自定义登陆,只要实现AuthenticationProvider还有对应的Authentication就可以了 Authentication 首先要创建一个自 ...

  2. Kali信息收集

    前言 渗透测试最重要的阶段之一就是信息收集,需要收集关于目标主机的基本细腻些.渗透测试人员得到的信息越多,渗透测试成功的概率也就越高. 一.枚举服务 1.1 DNS枚举工具DNSenum DNSenu ...

  3. vue大型电商项目尚品汇(后台终结篇)day06 重磅!!!

    自此整个项目前后台,全部搭建完毕. 今天是最后一天,内容很多,而且也比较常用,一个图标类数据可视化,一个后台的权限管理,都是很经典的类型. 一.数据可视化 1.简介 专门的一门学科,有专门研究这个的岗 ...

  4. Python教程:随机验证码生成和join 字符串

    函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下: join(): 连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符) ...

  5. 学习C4C的视频分享

  6. 一文讲明白K8S各核心架构组件

    目录 一.写在前面 二.K8S为我们提供了怎样的能力 三.架构 3.1.MasterNode 3.2.WorkerNode 四.核心组件 4.1.ApiServer 4.1.1.概述 4.1.2.是集 ...

  7. DENIED Redis is running in protected mode because protected mode is enabled

    DENIED Redis is running in protected mode because protected mode is enabled redisson连接错误 Unable to i ...

  8. SpringBoot数据库管理 - 用Liquibase对数据库管理和迁移?

    Liquibase是一个用于用于跟踪.管理和应用数据库变化的开源工具,通过日志文件(changelog)的形式记录数据库的变更(changeset),然后执行日志文件中的修改,将数据库更新或回滚(ro ...

  9. SQL语句的整合

    基础语法 https://blog.csdn.net/m0_37989980/article/details/103413942 CRUD 提供给数据库管理员的基本操作,CRUD(Create, Re ...

  10. C#异步延迟Task.Delay

    一. 1.Task.Delay实质是创建一个任务,再任务中开启一个定时间,然后延时指定的时间2.Task.Delay不和await一起使用情况,当代码遇到Task.Delay一句时,创建了了一个新的任 ...