Java数组
数组概述:
数组是存储多个变量(元素)的容器;
这多个变量的数据类型要一致;
定义格式:
数据类型 [] 数组名;(推荐使用)
int[] arr; 定义了一个int类型的数组,数组名是arr。
数据类型 数组名 [];
int arr[]; 定义了一个int类型的变量,变量名是arr数组。
数组初始化:
数组初始化,其实就是为数组开辟内存空间,并为数组中的每个元素赋予初始值。
a:动态初始化; 只给出长度,由系统给出初始化值。
b:静态初始化; 给出初始化值,有系统决定长度。
动态初始化:
int[] arr = new int[5]; //new为数组开辟内存空间,int[3]表示数组长度
打印:arr --> [I@1b6d3586 -->表示在内存中地址(用于寻址)
通过 arr[i]进行数组元素的取值。
赋值方式: arr[0] = x;
静态初始化:
int[] arr = {1,2,3};
int[] arr = new int[]{1,2,3};
Java中的内存分配方式
Java中内存分配:
1.栈:(存储的是局部变量)
2.堆:(存储的是new出来的东西)
3.方法区:(面向对象部分讲解)
4.本地方法区:(和系统相关)
5.寄存器:(给CPU使用)
栈:
a:存储的是局部变量。
b:局部变量就是定义在方法中的变量。
c:使用完毕立即回收。
堆:
a:存储的是new出来的,实体,对象。
b:每个对象都有首地址值。
c:每个对象的数据都有默认值。
d:数据使用完毕后,会在垃圾回收器空闲的时候被回收
两个数组指向同一个堆内存
int[] arr1 = new int[3]; //指向同一内存,所以只要改变就都改变
arr1[0] = 100;
arr1[1] =200;
arr1[2] =300;
int[] arr2 = arr1;
arr2[0] = 111;
arr2[1] = 222;
arr2[2] = 333;
System.out.println("arr1:"+arr1);
System.out.println("arr1[0]:"+arr1[0]);
System.out.println("arr1[1]:"+arr1[1]);
System.out.println("arr1[2]:"+arr1[2]);
System.out.println("===============");
System.out.println("arr2:"+arr2);
System.out.println("arr2[0]:"+arr2[0]);
System.out.println("arr2[1]:"+arr2[1]);
System.out.println("arr2[2]:"+arr2[2]);
System.out.println("===============");
数组两个常见小问题:
1.数组索引越界:java.lang.ArrayIndexOutOfBoundsException
(数组索引大于实际所以值)
2.空指针异常:java.lang.NullPointerException
(数组指向null,不再是指向堆数据,并按堆数据访问)
数组常见操作
1.数组遍历:
int[] arr = {11,22,33,44,55};
// for(int x=0,arr.x<arr.leng;x++)
for(int x=0,arr.x<=arr.leng-1;x++){
system.out.println(arr[x])
}
2.数组获取最值:
思路:找一个该数组的值作为参照物。
在这里插入代码片
public static void main(String[] args) {
int[] arr = {12,45,78,50,30};
int max = arr[0];
int min = arr[0];
for (int i=1; i<arr.length;i++){
if (arr[i]>max){
max = arr[i];
}
if (arr[i]<min){
min = arr[i];
}
}
System.out.println(max);
System.out.println(min);
数组练习:
需求:在编程竞赛中,有6个评委为选手打分,分数为0-100整数分。
选手的最后得分为:去掉一个最高分和最低分后4个评委的平均值。
public class Test09 {
public static void main(String[] args) {
int[] arr = new int[6];
int sum = 0;
Scanner sc = new Scanner(System.in);
for (int i = 0; i <= arr.length - 1; i++) {
System.out.println("请6个评委打分打分");
arr[i] = sc.nextInt();
sum += arr[i];
}
System.out.println("sum" + sum);
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (max < arr[i]) {
max = arr[i];
}
}
System.out.println("max" + max);
int min = arr[0];
for (int i = 1; i < arr.length; i++) {
if (min > arr[i]) {
min = arr[i];
}
}
System.out.println("min" + min);
System.out.println((sum-min-max)/(arr.length-2));
}
}
练习2:有一对兔子,从出生第3个月每个月都生一对兔子,
小兔子长到第三个月后每个月又生一对兔子,假如兔子不死,
问第二十个月的兔子对数为多少?
规律:
第一个月: 1
第二个月: 1
第三个月: 2
第四个月: 3
第五个月: 5
public class Test09 {
public static void main(String[] args) {
int[] arr = new int[20];
arr[0] = 1;
arr[1] = 1;
// arr[2] = arr[0] + arr[1]
// arr[3] = arr[1] + arr[2]
for (int i=2;i<arr.length;i++){
arr[i] = arr[i-1] + arr[i-2];
System.out.println(arr[i]);
}
}
}
数组排序
冒泡排序
举例: int[] arr = {24,69,80,57,13};
排序后: arr = {13,24,57,69,80};
package com.scy10;
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {24,69,80,57,13};
sort(arr);
printArray(arr);
}
public static void sort(int[] arr) {
for (int j = 0; j < arr.length - 1; j++) {
for (int i = 0; i < arr.length - j - 1; i++) {
// arr.length-1为了防止越界
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
}
public static void printArray(int[] arr){
System.out.print("[");
for (int i =0;i<arr.length;i++){
if (i==arr.length-1){
System.out.print(arr[i]);
}
else {
System.out.print(arr[i]);
System.out.print(", ");
}
}
System.out.print("]");
}
}
拜师教育学员文章:作者:976-沈同学,
转载或复制请以 超链接形式 并注明出处 拜师资源博客。
原文地址:《4.Java中的数组》 发布于2020-03-06
评论 抢沙发