java数组只能交换0下标和n,java数组(一看就懂,一用就不会)

java数组

1:了解什么是数组,什么是数组对象

(1)数组的概述:

数组是一组数据的集合,数组中的每个数据被称为元素。在java中,数组也是对象。数组中的元素可以是任意类型(基本类型和引用类)但同一个数组里只能存放类型相同的元素。

(2)数组对象:

数组类型的变量、类类型的变量、接口类型的变量都属于引用类型的变量,这些变量都是可以指向其相应的对象的,那么数组类型的变量指向的就是数组对象。例如:

Student stu = new Student();

String[] args = new String[5];

之前我们接触到的第一个数组类型变量,main方法的参数

public static void main(String[] args){

// args----->数组对象(jvm 创建 并传递过来)

}

其中 String[] 就是一个数组类型,args就是这个数组类型的变量,它所指向的数组对象中只能存放String类型的数据。

注:main方法是由JVM负责调用,那么args所指向的数组对象也是由JVM负责创建并传过来.

2.声明数组类型变量

(1)数组类型:

8种基本数据类型(float double byte short int long char boolean)和3种引用类型(类类型 接口类型 数组类型),使用这些都可以声明出数组类型,即:任意类型都可以声明成数组类型,只需要加"[]"即可。

例如:

基本类型的数组:

byte[] short[] int[] long[] float[] double[] char[] boolean[]

引用类型的数组:

//使用类声明出的数组

Student[]

//使用接口声明出的数组

Action[]

//使用数组声明出的数组

int[]

注意:使用X类型声明出的数组,那么将来该数组中就只能存放X类型的数据

(2)数组类型变量:

有俩种形式可以声明数组变量,推荐使用第一种。

int[] a;

或者

int a[];

int[] a = new int[4]

int a[] = {4,5,7}

int a[] = new int[]{4,5,7}

例如:

String[] str;

Student[] students;

long[] l;

注意:数组类型变量将来是要指向对象的。

(3)创建数组对象:

创建对象需要了解数组对象的长度:

数组的长度是指一个数组对象中可以存放多少个数据(元素),每一个数组对象在被创建的时候,就需要指明其长度是多少,并且该长度一确定的就不能再做修改。

数组对象的创建:

创建数组对象使用new关键字即可。

例如:

int[] a = new int[4];

String[] str = new String[1];

//表示该数组对象中一个数据都存放不了

char[] c = new char[0];

//编译报错,因为创建数组对象的时候不知道其长度

long[] v = new long[];

获得数组对象的长度:

使用数组对象访问其length属性即可获得该数组的长度

例如:

int[] a = new int[4];

System.out.println(a.length);//4

注意:对象创建后,数组的长度是不能改变的。

例如:

//编译报错

int[] a = new int[4];

a.length = 8;

//编译通过

//但是这只是又新建了一个数组对象

//而不是改变原来数组对象的长度

int[] a = new int[4];

a = new int[8];

(4)数组对象的初始化及使用

数组对象中每个元素位置上的默认值

数组对象中的默认值和其要保存的数据类型有关

例如:

int[] a = new int[4];

在我们存放数据之前,这四个元素位置上就以及有了默认值了

以下为各种类型在创建数组时的默认值:

整型数组的默认值是0

浮点型数组的默认值是0.0

布尔类型数组的默认值是false

字符类型数组的默认值是0

引用类型数组的默认值是null

数组对象中的元素位置的下标

由于数组对象在堆区中是一块连续的内存空间,那么我们可以通过连续的下标,找到每一个可以存放数据的元素位置。

注:下标是从0开始的

例如:

//通过下标0 1 2 3可以访问到数组对象中四个元素位置的值

//整型的默认值是 0

int[] a = new int[4];

System.out.println(a[0]);//0

System.out.println(a[1]);//0

System.out.println(a[2]);//0

System.out.println(a[3]);//0

//布尔的默认值是 false

boolean[] a = new boolean[4];

System.out.println(a[0]);//false

System.out.println(a[1]);//false

System.out.println(a[2]);//false

System.out.println(a[3]);//false

总结:如果一个数组对象的长度是n,那么这个数组下标的值是[0,n-1],其中n必须大于0

使用数组的下标赋值

String[] str = new String[3];

//赋值前:使用循环输出数组中的元素

for(int i=0;i

System.out.println(str[i]);

}

str[0] = "hello";

str[1] = "world";

str[2] = "test";

//赋值后:使用循环输出数组中的元素

for(int i=0;i

System.out.println(str[i]);

}

- 特殊形式

//编译通过

int[] a1 = new int[]{1,3,5,7,9};

System.out.println(a1.length);//5

//编译通过

int[] a2 = {2,4,6,8};

System.out.println(a2.length);//4

//编译通过

int[] a4;

a4 = new int[]{1,2,3};

System.out.println(a4.length);//3

/*下面俩种情况是错误的创建方式*/

//编译报错

int[] a3 = new int[3]{1,2,3};

//编译报错

int[] a4;

a4 = {1,2,3};

数组下标越界

对于一个长度为n的数组对象,它的的下标取值范围是[0,n-1],这里的0和n-1就是这个数组对象的下标边界,使用下标的过程中不能超出这个边界。如果超出那么就会运行报错.

例如:

int[] a = new int[4];

a[4] = 10;

运行后结果:

Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 4

at com.briup.test.ArrayTest.main(ArrayTest.java:7)

(5)数组使用例子

当我们了解了上面的数组的基础点后,我们就可以使用一些小列子来加强我们对数组的理解了

求一组值的平均值(int[]a={3,4,7,9,1,2}):

public double getAvg(int[] a){

double sum = 0;

for(int i=0;i

sum+=a[i];

}

return sum/a.length;

}

求一组值的最大值(int[]a={3,4,7,9,1,2})

public int getMax(int[] a){

int max = a[0];//int max = 0

for(int i=1;i

if(a[i]>max){

max = a[i];

}

}

return max;

}

冒泡排序

原理:相邻的俩个元素比较,让值较大的数据逐渐向数组的底部(即朝最后一个元素)移动。即比较两个相邻的元素,将值大的元素交换到右边。

简单记忆:一比二,二比三,大的在右边,每趟出一个最大的,两个for ,趟数length-1,比较次数length-1-趟数

public void sort(int[] a) {

for(int i=0;i

for(int j=0;j

if(a[j]>a[j+1]) {

int temp = a[j];

a[j] = a[j+1];

a[j+1] = temp;

}

}

}

}

从众多手机号码中抽取一个获奖手机号码和四位数验证嘛的实现(附上完整代码)

public class Telephone {

public static void main(String[] args) {

//随机电话号码

String arr[] = {"12345678876","123456765432","16784596545","12457896541","12347895475"};

//随机数[0,1) Math.random();

int index=(int)(Math.random()*arr.length);

System.out.println("索引值:"+index);

System.out.println("随机的电话号码:"+arr[index]);

//随机四位数

String s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

//将字符串转化为字符型数组

char[] c=s.toCharArray();

//4个随机数

int index1=(int)(Math.random()*c.length);

int index2=(int)(Math.random()*c.length);

int index3=(int)(Math.random()*c.length);

int index4=(int)(Math.random()*c.length);

System.out.println(""+c[index1]+c[index2]+c[index3]+c[index4]);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值