1. 数组是一种数据结构,用来存储同一类型值的集合。通过一个整型下标可以访问数组中的每一个值。a[i]就是数组中下标为i的整数。声明时,需要指出数组类型(紧跟[])和数组变量的名字,如 :
int[] s;//声明整型数组a,声明时不能指定长度,如int s[5]是错误的
这条语句没有将a初始化为一个真正的数组,应该使用new运算符创建数组。
int[] s=new int[5];//创建了一个可以存储5个整数的数组。
下标为0-4.之后可以给数组元素赋值。
int []s=new int[5];
for(int i=0;i<5;i++)
s[i]=2*i+1;
array.length可以获取数组的大小
本例中,如果试图访问s[5],程序就会引发“array index out of bounds”异常。
数组的初始化
1.动态初始化
数组定义与为数组元素分配空间和赋值的操作分开进行。
int a[ ]; //定义数组,即声明一个int类型的数组a[]
a=new int[3]; //给数组元素分配内存空间。
a[0]=3; a[1]=9; a[2]=8; //给数组元素赋值。
2.静态初始化
在定义数组的同时就为数组元素分配空间并赋值。
int a[ ] = { 3, 9, 8}; //在定义数组的同时给数组分配空间并赋值。
数组一旦创建,就不能再改变它的大小(不妨碍改变每一个元素),如果需要在运行过程中扩展数组的大小,就应该使用另一种数据结构--数组列表(array list)。
未赋值,默认初始化为0或者null;
For each循环
一种功能很强的循环,依次处理数组中每一个元素(其他类型也可以)。
语句格式:for(variable :collection)statement
定义一个变量用于暂存集合中的每一个元素,并执行相应的语句。collection
这一集合表达式必须为一个数组或者是一个实现了Iterable接口的类对象(例如ArrayList)。
例如,
for(int element:s)
System.out.println(element);//打印数组s的每一个元素,一个一行,即循环数组a中每一个元素(For each element in s),做到了不需要使用下标
更加便捷的打印数组方法,System.out.println(Array.toString(a))
如何重新初始化一个数组:
int []a={2,3,4,5,6};
b=a;
数组的长度也可以为0(与null不同)
3.数组拷贝
可以将一个数组变量拷贝给另一个数组变量。这两个变量将引用同一个数组:
int[]luckyNumbers=smallPrimes;
luckyNumbers[5]=12;//samallPrimes[5]=12
如果希望将一个数组的所有值拷贝到一个新的数组中去,就要使用Arrays类的CpoyOf方法:
int []copiedLuckyNumbers=Array.copyOf(luckyNumbers,2*luckyNumbers.length);//第二个参数表示增加数组大小
如果数组元素是数值型,那么多余的元素被赋值为0.如果是布尔型,那么多出的元素被赋值为false,如果元素长度小于原始长度,那么只拷贝最前面的数据
4.数组排序
使用Array类中的sort方法:
int[]a=new int[10000];
..
Array.sort(a)
import java.util.*;
import java.math.*;
/**
* code 随机抽奖
* @author asus
*
*/
public class Test1 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("抽多少?");
int k=in.nextInt();
System.out.println("一共多少?");
int n=in.nextInt();
//创建一个数组1,2,3...n
int[] numbers=new int[n];
for (int i=0;i<numbers.length;i++)
{numbers[i]=i+1;}
int[] result=new int[k];
for (int i=0;i<result.length;i++) {
//出现0到n-1的随机数
int r = (int) (Math.random()*n);
result[i]=numbers[r];
numbers[r]=numbers[n-1];
n--;
}
System.out.println("恭喜下列号码中奖");
Arrays.sort(result);
for(int r:result)
System.out.println(r);
}
}