数组异常
1)数组角标越界异常:
ArrayIndexOutOfBoundsException
2)空指针异常:
NullPointerException (在内存中,可能对象为null了,使用对象调用它的功能)
数组应用
求最值问题:最大值,最小值
class ArrayTest{
public static void main(String[] args){
//定义一个是数组,静态初始化
int[] arr = {26,89,13,65,19} ; // 需求:13这个元素第一次出现的索引值
//使用方法改进
//调用求最大值的方法
int max = getMax(arr) ;
System.out.println("数组中的最大值是:"+max);
System.out.println("---------------------");
int min = getMin(arr) ;
System.out.println("数组中的最小值是:"+min);
}
//定义最小值的方法
public static int getMin(int[] arr){
//参照物
int min = arr[0] ;
for(int x = 1 ; x < arr.length ; x++){
if(arr[x] < min){
min = arr[x] ;
}
}
return min ;
}
/*
定义方法:
两个明确:
1)明确返回值类型:int类型
2)明确参数个数以及参数类型 ,1个参数,数组
*/
public static int getMax(int[] arr){
//定义参照物
int max = arr[0] ;
for(int x = 1; x < arr.length ; x ++){
if(arr[x] > max){
max = arr[x] ;
}
}
return max ;
}
}
数组的元素逆序
class ArrayTest2{
public static void main(String[] args){
//定义一个数组,静态初始化
int[] arr = {11,87,56,50,24};
System.out.println("交换前:") ;
//遍历数组
printArray(arr) ;
System.out.println("交换后:") ;
//逆序
reverse(arr) ;
printArray(arr) ;
System.out.println("-------------------------") ;
System.out.println("交换后:") ;
//逆序
reverse2(arr) ;
printArray(arr) ;
}
//方式2
public static void reverse2(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 ;
}
}
//将逆序封装成功能
//reverse:反转
public static void reverse(int[] arr){
for(int x = 0 ; x < arr.length/2; x ++){
int temp = arr[x] ;
arr[x] = arr[arr.length-1-x] ;
arr[arr.length-1-x] = temp ;
}
}
//遍历数组
public static void printArray(int[] arr){
System.out.print("[");
for(int x = 0 ; x < arr.length; x ++){
if(x== arr.length-1){
System.out.println(arr[x]+"]") ;
}else{
System.out.print(arr[x]+", ") ;
}
}
}
}
数组元素查表法(通过数组对象[角标值],查找元素)
import java.util.Scanner;
class ArrayTest3{
public static void main(String[] args){
//定义字符串数组
String[] strArray = {"星期一","星期二","星期三","星期四","星期五","星期六","星期日"} ;
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//接收
System.out.println("请输入一个数据(0-6):");
int index = sc.nextInt() ;
//输出
System.out.println("查找的是:"+strArray[index]) ;
}
}
二维数组
定义格式:
数据类型[][] 数组名称 = new 数据类型[m][n] ;动态初始化
m:当前二维数组中有几个一维数组,
n:一维数组中的元素个数
二维数组遍历
class ErBianLi{
public static void main(String [] csa){
int[][] arr={{1,2,3},{4,5,6},{7,8,9}};
printArray(arr) ;
System.out.println() ;
}
public static void printArray(int[][] arr){
for(int x = 0 ; x < arr.length ; x ++){
for(int y = 0 ; y < arr[x].length ; y++){
System.out.print(arr[x][y]+" ") ;
}
}
}
}
形式参数问题
方法的形式参数如果是一个基本数据类型,形式参数的改变对实际参数没有影响! (具体的数据值)
方法的形式参数如果是引用数据类型,形式参数的改变会直接影响实际参数!(空间地址值)
class ArgsDemo{
public static void main(String[] args){
//定义两个变量
int a = 10 ;
int b = 20 ;
System.out.println("a:"+a) ;//10
System.out.println("b:"+b) ;//20
//调用了一个方法
change(a,b) ;
System.out.println("a:"+a) ;//10
System.out.println("b:"+b) ;//20
//定义一个数组
int[] arr = {1,2,3,4,5} ;
change(arr) ;
System.out.println(arr[1]) ; //4
}
public static void change(int a,int b){
System.out.println("a:"+a) ;
System.out.println("b:"+b) ;
a = b ;
b = a+ b;
}
public static void change(int[] arr){//形式参数是引用类型,形参的改变直接影响实际参数
//遍历数组
for(int x = 0 ; x < arr.length ; x ++){
if(arr[x] %2 ==0 ){
arr[x]*=2 ;
}
}
}
}