8.6小白学习数组(一维数组)
这是正常编写代码的时候。记住数组的下标是从0开始,而不是1开始,这里我们虽然定义了30,这里的30是30个元素的意思。因为从0开始,所以达到的是29,而不是30.所以我们数组下标写30是错误的,越界的!
我来图片表示一下为什么数组下标从0开始。
如果出现数组下标为负数或者越界的时候。
就会出现编译正确而抛出异常的问题。Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 30
at ArraryTest.func1(ArraryTest.java:20)
at ArraryTest.main(ArraryTest.java:25)
二 访问数组
//定义数组
public class ArraryTest2
{ //错误:缺少数组维
// int i[] =new int[];
int i[] =new int[10];
float[] f =new float[10];
boolean b[] =new boolean[10];
//引用数据类型数组
Object obj[] =new Object[10];
public void func1(){
//通过for循环语句赋值
for (int x=0;x<i.length ;x++ )
{
i[x] =x;
}
//通过循环语句遍历我们数组
for (int index=0;index<i.length ;index++ )
{
System.out.println("i["+index+"]"+i[index]);
}
//演示float数组的默认情况;
System.out.println("------------");
//增强for循环,遍历数组,每次去数组的元素并赋值给a变量。
//直到取完整个数组
for (float a:f)
{
System.out.println(a);
}
for (boolean c:b)
{
System.out.println(c);
}
//局部变量必须现赋值后使用
for (Object o:obj)
{
System.out.println(o);
}
}
public static void main(String[] args){
ArraryTest2 tc =new ArraryTest2();
tc.func1();
}
};
boolean类型默认值为false
遍历数组
例子
//冒泡排序
public class Maopao
{
public void func1(){
int[] a ={90,10,55,33,100,77,88,66,99};
//外层循环是循环要比的轮数
for (int i=0;i<a.length-1 ;i++ )
{ //内循环比的是每轮要比较的次数
for(int j=0;j<a.length-1-i;j++)
{ int temp =0;
if(a[j]>a[j+1]){
temp =a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(int i :a){
System.out.println(i);
}
}
public static void main(String[] args){
Maopao tc =new Maopao();
tc.func1();
}
};
例子得到解析:里面一共9个数,9个数第一轮从左边第一个数开始和后面的8个数比较要比较8次,因为自己不可能跟自己比较。等到找到最大的数排在后面。又开始新的一轮也就是第二轮,又从左边第一个开始和后面的数字开始比较,(注意:最后一个数不用比较了,因为它是最大的。)所以也就是得知最后一个数字不用比较,那么第二轮开始也就剩下8个数,那么剩下的8个数里面左边第一个开始是它自己开始,那么也就比较7次。以此类推。就会发现规律。第一轮比较8次、第二轮比较7次、第三轮比较6次…第八轮比较1次。也就是用两个for循环。第一个for循环表示轮次,第二个for循环表示次数。 轮次是数组长度-1。比较次数也是数组长度-1.所以for循环内的表达式清除了。 然后是里面的核心算法。有的人会想不明白为什么引用temp这个参数空值,那么我举个例子吧。当你有一瓶酒和一瓶醋,那么两个要互相换,不可能是拿酒直接倒进去醋,拿醋直接倒进去酒,那样子会破坏。平常生活中我们都是拿一个空的瓶子来接,然后醋瓶子空了就可以拿酒倒进去了。所以里面的temp就相当于一个空瓶子的作用。