数组
1.数组的定义格式
1.1第一种格式:数据类型[] 数组名
int[] arr;
double[] arr;
char[] arr;
1.2第一种格式: 数据类型 数组名[]
int arr[];
double arr[];
char arr[];
2.数组的初始化
2.1 动态初始化格式
数据类型[] 数组名 = new 数据类型[数组长度];
int[] arr = new int[3]; //数组动态初始化就是只给定数组的长度,由系统给出默认初始化值
2.2 静态初始化格式
完整版格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
简化版格式:数据类型[] 数组名 = {元素1,元素2,...};
3.数组元素访问
3.1什么是索引
每一个存储到数组的元素,都会自动的拥有一个编号,从0开始。
这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。
格式:数组名[索引];
5.内存分配
5.1内存概述
– 内存是计算机中的重要原件,临时存储区域,作用是运行程序。
-- 我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的。
-- 必须放进内存中才能运行,运行完毕后会清空内存。
– Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。
5.2 java中的内存分配
6.数组操作的两个常见问题
6.1 索引越界异常
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = new int[3];
System.out.println(arr[3]);//索引范围是0~2,问了一个3的索引
} //将错误的索引修改为正确的索引范围即可!
}
6.2空指针异常
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = new int[3];
//把null赋值给数组
arr = null;
System.out.println(arr[0]);
}
}
arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候会抛出 NullPointerException 空指针异常。在开发中,空指针异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。
– 解决方案
给数组一个真正的堆内存空间引用即可!
7.数组遍历
数组遍历:就是将数组中的每个元素分别获取出来,就是遍历。遍历也是数组操作中的基石。
public class ArrayTest01 {
public static void main(String[] args) {
//定义数组
int[] arr = {11, 22, 33, 44, 55};
//使用通用的遍历格式
for(int x=0; x<arr.length; x++) {
System.out.println(arr[x]);
}
}
}
8.数组例题
定义一个数组其中包含多个数字。用自己的方式最终实现,奇数放在数组的左边,
偶数放在数组的右边。(可以创建其他数组,不必须在原数组中改变)
public class Demo8 {
public static void main(String[] args) {
//1.定义原数组
int[] arr = {12,23,34,45,67,78,11,22};
//2.定义空数组
int[] brr = new int[arr.length];
//3.定义变量代表奇数要存放的位置
int left = 0;
//4.定义变量代表偶数要存放的位置
int right = arr.length-1;
//5.对原数组进行遍历
for (int i = 0; i < arr.length; i++) {
if(arr[i] % 2 == 1){
//5.1如果是奇数就往左边放
brr[left] = arr[i];
//5.2存放之后让索引向右移动
left++;
}else{
//5.3如果是偶数就往右边放
brr[right] = arr[i];
//5.4存放之后让索引向左移动
right--;
}
}
//6.打印brr数组
for (int i = 0; i < brr.length; i++) {
System.out.print(brr[i] + " ");
}
}
}
9.数组的合并
现在给出两个数组:
数组a:"1,7,9,11,13,15,17,19"
数组b:"2,4,6,8,10"
两个数组合并为数组c。
package day4;
public class day4Test2_9 {
public static void main(String[] args) {
int[] a = {1,7,9,11,13,15,17,19};
int[] b ={2,4,6,8,10};
int[] c = new int[a.length+b.length];
for (int i=0,j=0,k=0;i<c.length;i++)
{
if (i<a.length)
{
c[j]=a[i];
j++;
}
else {
c[j]=b[k];
k++;
j++;
}
}
for (int i=0;i<c.length;i++)
{
System.out.print(c[i]+" ");
}
}
}
运行结果:
10.求平均分
B哥去参加青年歌手大奖赛,有10个评委打分,(去掉一个最高一个最低)求平均分是多少?
评委打分:99,97,96,95,94,92,91,90,88,100
public class day4Test2_10 {
public static void main(String[] args) {
double[] score = {99,97,96,95,94,92,91,90,88,100};
double max = score[0];
double min = score[0];
int sum = 0;
for (int i =0;i<score.length;i++)
{
sum+=score[i];
if (max<score[i])
{
max = score[i];
}
else if(min>score[i])
{
min = score[i];
}
}
System.out.println("最高分为"+max+" 最低分为"+min);
double ave = (sum-max-min)/(score.length-2);
System.out.println("(去掉一个最高一个最低)平均分为"+ave);
}
}
运行结果
11.求该数组中第二大的数的下标
数据如图:{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
public class day4Test2_11 {
public static void main(String[] args) {
int[] num = {1,2,3,4,5,6,7,8,9,0};
int index = 0;
int max = num[0];
for (int i = 0;i<num.length;i++)
{
if (max<num[i])
{
max = num[i]; //找出最大值
index= i; //找出最大值下标
}
}
num[index]=0; //让最大值为零
max = num[0];
index = 0; //初始化
for (int i = 0;i<num.length;i++){
if (max<num[i])
{
max = num[i]; //找出最大值
index= i; //找出最大值下标
}
}
System.out.println(index);
}
}