数组
特点:
数组中的元素必须是同一种数据类型
数组长度不能更改 //数组中的元素不能增删,会造成长度改变,只能新建数组;
相关例题
- 创建一个int类型的数组,使用静态初始化赋值,求数组中元素之和,和平均值
public class Test{
//创建一个int类型的数组,使用静态初始化赋值,求数组中元素之和,和平均值
public static void main(String[] args) {
int[] arr = new int[]{12,24,2,6,54,24,76,71,19};
//int[] arr = {12,24,2,6,54,24,76,71,19}; 可以简写为这种形式
int sum=0;
for(int i=0;i<arr.length;i++){
sum+=arr[i];
}
System.out.println("数组元素之和为"+sum);
System.out.println("数组元素平均值为"+1.0*sum/arr.length); //平均值需要转为double
//System.out.println("数组元素平均值为"+((double)sum)/arr.length); //先将sum转为double
}
}
- 创建一个boolean类型的4个元素的数组,存储:false ,true, false true
public class Test{
public static void main(String[] args) {
//创建一个boolean类型的4个元素的数组,存储:false ,true, false true
boolean[] boo = new boolean[]{false,true,false,true}; //静态方法
for(int i = 0 ; i < boo.length;i++){
System.out.print(boo[i]+"\t");
}
System.out.println();
System.out.println("--------------------");
boolean[] boo2 = new boolean[4]; //动态方法 数组中元素默认值为false
boo2[1] = true;
boo2[3] = true; //只需要改1和3为true;因为其他默认为false
for(int i = 0 ; i < boo.length;i++){
System.out.print(boo[i]+"\t");
}
//打印数组还有一个方法,后面要学习 很重要 Arrays.toString(数组名)
//System.out.println(Arrays.toString(boo2));
}
}
- 点名系统: 从班级所有人的姓名中随机抽选出来一个,祝她生日快乐
构建一个String[] 用来存储全班同学的姓名
生成一个随机数,作为索引值,从数组从把该索引对应的元素取出来
new Random().nenextInt(10); // [0,10) 注意取出的数的范围
import java.util.Random;
public class Test{
public static void main(String[] args) {
String[] names= {"张三","李四","王五","赵六","钱七","孙八","周九","吴十"};
Random random = new Random(); // ctrl+shift+o 可以自动调取包
int i = random.nextInt(names.length);// [0,8)生成随机整数,左闭右开 即[0,7]
System.out.println("今天"+names[i]+"过生日,我们祝他生日快乐");
}
}
二维数组
二维数组在创建时,其第一层储存的时一个地址值,然后每个地址值对应一个一维数组
数组工具类封装(数组与定义方法结合)
将一些方法定义在一个特定的类里面,这些方法会被经常使用,比如打印数组,数组的逆序,数组排序等功能
在调用时只需要用 类名.方法名(参数列表)
public class ArrayUtil {
//int类型的数组的遍历
public static void printArr(int[] arr) {
for(int i=0;i<arr.length;i++) {
if(arr.length == 1) {
System.out.println("["+arr[0]+"]");
}else if(i == 0) {//第一个元素, [元素,
System.out.print("["+arr[i]+",");
}else if(i == arr.length-1) {//最后一个元素, 元素值]
System.out.println(arr[i]+"]");
}else {
System.out.print(arr[i]+",");
}
}
}
//String类型的数组的遍历
public static void printArr(String[] arr) { //方法的重载
for(int i=0;i<arr.length;i++) {
if(arr.length == 1) {
System.out.println("["+arr[0]+"]");
}else if(i == 0) {//第一个元素, [元素,
System.out.print("["+arr[i]+",");
}else if(i == arr.length-1) {//最后一个元素, 元素值]
System.out.println(arr[i]+"]");
}else {
System.out.print(arr[i]+",");
}
}
}
//打印数组中最大值和最小值
public static void printMaxAndMin(int[] arr) {
int max = arr[0];
int min = arr[0];
for(int i=0;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);
}
//交换数组中的两个元素
public static void swap(int[]arr,int x,int y) {
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
//数组的逆序1
public static void reverse(int[] arr){
for(int i = 0; i < arr.length/2;i++){
int tmp = arr[i];
arr[i] = arr[arr.length-i-1];
arr[arr.length-i-1] = tmp;
}
}
//数组的逆序2
public static void reverse1(int[] arr) {
for(int start=0,end=arr.length-1;start<end;start++,end--) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
}
// 数组元素查找,返回索引值
public static int indexOf(int[]arr,int num){
for(int i=0;i<arr.length;i++){
if(arr[i]==num){
return i;
}
}
return -1; //如果返回是-1 表明没有此元素
}
}
数组中常见的两种异常
空指针异常
数组角标越界异常
public class ArrayDemo4 {
public static void main(String[] args) {
int[] arr = null;
System.out.println(arr);//null
//是用null 调用里面的东西
//System.out.println(arr.length); //空指针异常
String str = null;
System.out.println("爱".equals(str)); //不用str.equals("爱”),否则会报空指针异常
arr = new int[3];
System.out.println(arr[3]); //数组下标越界 元素索引最大为2
}
}
双色球案例 **************
创建一个数组,放6个红球和1个蓝球,
红球选6个:1–33之间 红球不能重复
boolean[33]
蓝球选1个:1–16之间
import java.util.Arrays;
import java.util.Random;
//双色球需求:红球选六个,蓝球选一个
//红球6个:1--33
//篮球1个:1--16
public class DoubleBoll {
public static void main(String[] args) {
boolean [] arr = new boolean[33]; //建一个boolean数组,其每个元素默认值为false
int count = 0; //红球个数
while(true){
int index = new Random().nextInt(33);
if(! arr[index]){ //当index对应的元素为flase,表明还没使用过;如果为true,表明使用过了,跳过
arr[index] =true; //将其改为true
count ++;//计数加1,表明红球数目加1
}
if (count ==6){ //球数够6个就终止循环
break;
}
}
int [] qiu = new int[7];//存放所有的球 一共7个 6个红 1个蓝
for(int i = 0;i<arr.length;i++){//去boolean数组中找元素为true的,将其索引+1赋给qiu数组中的元素 为什么时索引+1 呢 因为其索引范围时0-32 我们要的是1-33之间的数
if(arr[i] == true){
count--; //表示红球放进去了一个
qiu[count] = i+1;
}
}
qiu[6] = new Random().nextInt(16)+1; //第6个球 从1-16之间取一个
System.out.println(Arrays.toString(qiu)); //打印数组 也可以用我们封装好的数组工具类中的方法打印数组
}
}