数组
数组的基础知识
1.什么是数组:数组是指一组数据的集合,其中的每个数据被称作元素,在数组中可以存放任意类型的元素,数组是一种将一组数据存储在单个变量名下的优雅方式。
2.数组的作用:用来存储固定大小的同类型元素
3.数组的特点
(1)数组的长度一旦初始化,长度就固定了,不能改变
(2)数组容器中既可以存储基本数据类型,也可以存储引用数据类型
(3)一个数组容器中的所有元素的数据类型必须是相同的
4.数组的定义格式:
格式一:
元素的数据类型[] 数组名称 = new 元素的数据类型[元素的个数(数组的长度)]
eg: int[] arr = new int[10];
格式二:
元素的数据类型[] 数组名称 = new 元素的数据类型[]{元素1,元素2,元素3,……};
eg:int[] arr = new int[]{12,13,45};
格式三:
元素的数据类型[] 数组的名字 = {元素1,元素2,元素3,……};
eg:int[] arr = {12,13,45};
5.数组的初始化:
存数据格式:数组名[索引] = 数据;
索引:就是编号,从0开始编号,依次往后,最大的编号是容器的长度-1
eg:int[] arr = new int[3];
arr[0] = 12;
arr[1] = 2;
6.读取数组数据:
格式:数组名[索引];
7.遍历数组
数组名.length:获取数组容器的长度
int[] arr = new int[]{12,13,45};
for(int i = 0; i < arr.length; i++){
int a = arr[i];
System.out.println(a);
}
数组的内存图:
eg:
int[] arr = new int[3];
arr[0] = 12;
arr[2] = 14;
System.out.println(arr[0]);//12
System.out.println(arr[1]);//0
System.out.println(arr[2]);//14
System.out.println(arr); //0x001
数组常报的错误
- ArrayIndexOutOfBoundsException(数组索引越界异常)
int arr = {12,13,45};
System.out.println(arr[3]);//报错
NullPointerException(空指针异常)
int arr = {12,13,45};
System.out.println(arr[0]);
arr = null;
System.out.println(arr[0]);//报错
注意:null是空常量,只能赋值给引用数据类型的变量
数组的常见操作
1.遍历输出所有的元素
for(int i = 0;i < arr.length;i++){
System.out.println(arr[i]);
}
2.获取最大值,最小值
Way-1:
int[] arr = {3,4,5,2,1,9,0,12};
int max = arr[0];
int min = arr[0];
for(int i = 0;i < arr.length;i++){
if(max < arr[i]){
max = arr[i];
}
if(min > arr[i]){
min = arr[i];
}
}
System.out.println(max,min);
Way-2:
int[] arr = {3,4,5,2,1,9,0,12};
int max = 0;
int min = 0;
for(int i = 0;i < arr.length;i++){
if(arr[max] < arr[i]){
max = i;
}
if(arr[min] > arr[i]){
min = I;
}
}
System.out.println(arr[max],arr[min]);
3.基本查找操作
int[] arr = {23,45,12,567,78434,323,567,0};
Scanner sc = new Scanner(System.in);
System.out.println(“请您输入一个数字”);
int num = sc.nextInt();
boolean b = false;
for(int i = 0;i < arr.length;i++){
if(arr[i] == num){
b = true;
break;
}
}
if(b){
System.out.println(“找到了”):
}else{
System.out.println(“没找到”);
}
4.数组的反转
int[] arr = {12,34,56,224,56,434};
for(int i = 0,j = arr.length;I < arr.length;i++,j--){
int temp = arr[i];
arr[i] =arr[j];
arr[j] = temp;
}
5.数组排序
int[] arr = {12,34,56,224,56,434};
way-1:选择排序
for(int i = 0;i < arr.length - 1;i++){
for(int j = i+1;j < arr.length;j++){
if(arr[i] > arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
Way-2:冒泡排序
for(int i = 0;i < arr.length -1;i++){
for(int j = 0; j< arr.length-1-i;j++){
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
二维数组
1.定义:元素为一维数组的数组成为二维数组
2.二维数组的定义格式:
格式一:元素的数据类型[][] 数组的名字 = new 元素的数据类型[二维数组的长度][一维数组的长度]
int[][] arr = new int[3][2];
格式二:元素的数据类型[][] 数组的名字 = new 元素的数据类型[二维数组的长度][]
int arr = new int[3][];
System.out.println(arr[0]);//null
System.out.println(arr[1]);//null
System.out.println(arr[2]);//null
格式三:元素的数据类型[][] 数组的名字 = {{元素1,元素2,……},{元素1,元素2,……},{元素1,元素2,……},……}
int arr = {{1,2,3},{4,5,6},{7,8}}
注意:每一个一维数组中的元素的个数是可以不一样的
3.二维数组的遍历
for(in t i = 0;i < arr.length;i++){
for(int j = 0;j<arr[i].length;j++){
System.out.println(arr[i][j]);
}
}
方法
定义
具有特定功能的独立的小程序{代码块}
作用
提高了代码的复用性
提高了代码的维护性
格式:
修饰符 返回值类型 方法的名字(数据类型 变量名, 数据类型 变量名,……){
执行语句;(该方法的功能的代码实现)
return 返回值;
}
- 修饰符:目前学习阶段,规定为public static
- 返回值类型:返回值的数据类型
- 方法的名字:见名知意,驼峰命名法
- (……):参数列表
调用
方法只有被调用才会执行
方法一:单独调用 —— 方法名(参数)
注意:如果方法的返回值类型为void的时候,不能使用输出调用;
如果方法有具体返回值的时候,使用单独调用没有任何意义
方法二:输出调用 —— System.out.println(方法名(参数))
注意:如果方法的返回值类型为void的时候,不能使用输出调用
方法三:赋值调用 —— 数据类型 变量名 = 方法名(参数)
使用方法的注意事项
(1)方法与方法是平级关系,所以不能嵌套定义
public static int aaa(){
public static int bbb(){ //错误使用
return 1;
}
return 1;
}
(2)方法的返回值类型和return出来的值要匹配
(3)当方法没有具体的返回值的时候,返回值类型就位void
public static void aaa(){
return ;
}
void:没有什么特殊的含义,而且只能写在返回值类型的位置上,代表该方法没有返回值
注意:当方法的返回值类型为void的时候,return关键字是可以省略不写的
public static void aaa(){
//return;
}
(4)return关键字有什么用呢?
可以返回具体的数据,哪里调用返哪里
作为方法的结束标记
方法的重载
(1)什么是方法的重载:指在同一个类中,出现两个方法的名字相同,参数列表不同(参数的个数不同,数据类型不同,对应的顺序位置不同)的两个方法,就称为方法的重载
方法的重载与返回值类型无关
public class Demo{
public void aaa(){
}
public void aaa(int i){
}
public void aaa(int i,int j){
}
public void aaa(double i,double j){
}
public void aaa(int i,double j){
}
public int aaa(int i,double j){
}
/*public void aaa(double x,double y){ //错误
}*/
/*public int aaa(double i,double j){ //错误
}*/
}