数组的定义格式:
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. sharepoint 配置失败,已引发类型为System.ArgumentException的异常。其他异常信息:domainName参数不支持指定的值。

    解决方法:在域控制器中加入sharepoint计算机,设置为administrators组中

  2. 从Hadder看蛋白质分子中的加氢算法

    技术背景 PDB(Protein Data Bank)是一种最常用于存储蛋白质结构的文件.而我们在研究蛋白质构象时,往往更多的是考虑其骨架,因此在很多pdb文件中直接去掉了氢原子.但是在我们构建蛋白质 ...

  3. 想看,但电脑没网怎么办,python教你保存整本成TXT~

    各位大佬好鸭!又是我小熊猫啦咱这次直接上代码 开始之前先解释下: 模块: requests >>> pip install requestsparsel >>> p ...

  4. 记一次重复造轮子(Obsidian 插件设置说明汉化)

    杂谈 #Java脚本 因本人英语不好在使用Obsidian时,一些插件的设置英文多令人头痛.故有写一个的翻译插件介绍和设置脚本的想法.看到有些前人写的一下翻译方法,简直惨目忍睹.竟然要手动.这个应该写 ...

  5. 『现学现忘』Git后悔药 — 29、版本回退git reset --mixed命令说明

    git reset --mixed commit-id命令:回退到指定版本.(mixed:混合的,即:中等回退.) 该命令不仅修改了分支中HEAD指针的位置,还将暂存区中数据也回退到了指定版本. 但是 ...

  6. Whats On Tap | Tapdata Cloud 如何助力大型家居连锁商城推进数字化经营?

    Tapdata Cloud 的操作有多便捷,上手试一下就能充分了解了.--Tapdata Cloud 用户 | 报表实施 @某大型家居服务平台 一边是监管政策趋严,推动房地产回归本源,存量竞争时代开启 ...

  7. JDBCToolsV2:利用ThreadLocal保证当前线程操作同一个数据库连接对象。

    JDBCToolsV2:     利用ThreadLocal保证当前线程操作同一个数据库连接对象. package com.dgd.test; import com.alibaba.druid.poo ...

  8. docker for window WSL 2 installation is incomplete 错误,导致docker无法启动

    1.错误截图如下: 2.错误原因:由于wsl2版本旧,根据提示让我们手动更新包,去微软官网下载最新wsl2后,安装完成重启即可解决. 3.下载地址:download地址

  9. 使用supervisor设置应用开机自启

    安装supervisor: sudo apt install supervisor -y 创建配置文件: sudo vim /etc/supervisor/conf.d/frpc.conf frpc. ...

  10. Note -「序列元素在线段树上的深度」 感悟

    0x01 前言 想法源于一道你谷的毒瘤题目. 这个方面的知识点好像挺新颖的. 于是和 JC 一起想出了该命题的 \(O(n)\) 解法. 0x02 算法本身 总所周知,线段树上的节点都对应表示的原序列 ...