Java 基础第三天

3.17 Java基础 第三天

数组

数组的概念
数组是指一组数据的集合,数组中的每个数据被称作元素。
在数组中可以存放任意类型的元素,但同一个数组里存放的元素类型必须一致。

数组定义格式

数据类型[] 数组名 = new 数据类型[数组的长度];

示例代码:
public static void main(String[] args) { 
  //数据类型[] 数组名 = new 数据类型[数组的长度]; 
  int[] arr = new int[5];  //该数组可以存储五个 int类型的数据 
  /* 
  左边: 
    int:数据类型 
    []:表示数组,几个中括号就代表几维数组(后续讲) 
    arr:合法的标识符、变量名 
  右边: 
    new:创建新的实体或对象 
    int:数据类型 
    []:表示数组 
    5:表示数组的长度(给定几个空间存东西) 
  */ 
} 
数组的初始化和赋值
初始化和默认值

初始化就是为数组开辟连续的内存空间,并为每个数组元素赋值
初始化分为动态初始化和静态初始化

  1. 动态初始化:只指定长度,由系统给出初始化值
    int[] arr = new int [5]
  2. 静态初始化:给出初始化值
    数据类型[] 数组名 = new 数据类型[]{元素 1,元素 2,元素3};
代码示例:默认初始化
/* 
    默认初始化值: 
  整数类型:byte,short,int,long默认初始化值都是 0 
  浮点类型:float,double默认初始化值都是 0.0 
  布尔类型:boolean默认初始化值 false 
  字符类型:char默认初始化值'\u0000' 
*/ 
class Demo { 
  public static void main(String[] args) { 
    //数据类型[] 数组名 = new 数据类型[数组长度]; 
    int[] arr = new int[5];        //动态初始化,在内存中开辟连续
的 5块空间 
    System.out.println(arr[0]);      //系统给出默认初始化值,整数类
型的都是 0 
    arr[0] = 10; 
    System.out.println(arr[0]);   
    System.out.println(arr);      //[I@56bc3aa 

        //默认值是 0.0 
        float[] arr2 = new float[10]; 
        System.out.println(arr2[0]); 

        //String s = "李四";//字符串 
        // String 引用类型,默认值是 null 
        String[] arr3 = new String[10]; 
        System.out.println(arr3[0]); 

        //boolean 默认值是 false 
        boolean[] arr4 = new boolean[10]; 
        System.out.println(arr4[0]); 

        char[] arr5 = new char[10]; 
        System.out.println(arr5[0]); 
  } 
} 
代码示例:静态初始化
/** 
 * 数组初始化方式二 
 * 静态初始化:给出初始化值 
 */ 
public class Demo04 { 
  public static void main(String[] args) { 
    //                     0 1 2 3  下标 
    int[] arr1 = new int[]{1,2,3,4}; 
    System.out.println(arr1[2]); 

    //String 类型的数组 
    String[] arr2 = new String[]{"李四","王五"}; 
    System.out.println(arr2[0]); 
    System.out.println(arr2[1]); 
  } 
} 
数组赋值

数组中使用下标取值
如果在使用数组时,不想使用这些默认初始值,也可以显式地为这些元素赋值
赋值语法:
arr[0]=1 给arr数组的第 0个位置赋值为 1

示例代码
public class ArrayDemo02 { 
    public static void main(String[] args) { 
      int[] arr = new int[4]; // 定义可以存储 4个整数的数组 
      arr[0] = 1; // 为第 1个元素赋值 1 
      arr[1] = 2; // 为第 2个元素赋值 2 
      // 下面的代码是打印数组中每个元素的值 
      System.out.println("arr[0]=" + arr[0]); 
      System.out.println("arr[1]=" + arr[1]); 
      System.out.println("arr[2]=" + arr[2]); 
      System.out.println("arr[3]=" + arr[3]); 
    } 
} 
数组的常见操作
数组遍历

使用for循环获取数组的值,通常使用.length()方法获得数组的长度
public class Demo {
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5 }; // 定义数组
// 使用 for循环遍历数组的元素
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]); // 通过索引访问元素
}
}

数组取最值

在操作数组时,经常需要获取数组中元素的最值(最大、最小)

思路步骤:
1. 首先假设数组中第一个元素 arr[0]为最大值
2. 后使用 for 循环对数组进行遍历并比较比 max 值还大的元素,并赋值给 max,此时
max就能够在循环结束时记住数组中的最大值。

示例代码
public class ArrayDemo05 { 
  public static void main(String[] args) { 
    int[] arr = { 4, 1, 6, 3, 9, 8 }; // 定义一个数组 
        int max = arr[0]; // 定义变量 max用于记住最大数,并假设第一个元素为最
大值 
    // 下面通过一个 for循环遍历数组中的元素 
    for (int x = 1; x < arr.length; x++) { 
      if (arr[x] > max) { // 比较 arr[x]的值是否大于 max 
        max = arr[x]; // 条件成立,将 arr[x]的值赋给max 
      } 
    } 
    System.out.println("max=" + max); // 打印最大值 
  } 
} 
注意:在 for循环中的变量 i是从 1开始的,原因是程序已经假设第一个元素为最大值
数组排序

冒泡排序
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的
元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

排序算法还有:选择排序等

冒泡排序示例代码:
public static void main(String[] args) { 
  int[] numbers = new int[] { 5, 7, 3, 8, 5, 11 }; 
  int temp = 0; 
  int size = numbers.length; 
  for (int i = 0; i < size - 1; i++) { 
    for (int j = 0; j < size - 1 - i; j++) { 
      if (numbers[j] > numbers[j + 1]) // 交换两数位置 
      { 
        temp = numbers[j]; 
        numbers[j] = numbers[j + 1]; 
        numbers[j + 1] = temp; 
      } 
    } 
  } 

  // 打印排序结果 
  for (int i = 0; i < numbers.length; i++) { 
    System.out.print(numbers[i] + "  "); 
  } 
}

多维数组

多维数组可以简单地理解为在数组中嵌套数组,常见的就是二维数组

二维数组的定义
二维数组的定义方式一

int[][] arr = new int[3][4]

上面的代码相当于定义了一个 3*4 的二维数组,即二维数组的长度为 3,二维数组中的每
个元素又是一个长度为 4的数组。

示例代码:
class Demo1 { 
  public static void main(String[] args) { 
    int[][] arr = new int[3][4]; 
    System.out.println(arr); // 二维数组 
    System.out.println(arr[0]); // 二维数组中的第一个一维数组,打印的是内
存地址 
    System.out.println(arr[0][0]); // 二维数组中的第一个一维数组的第一个
元素 
  } 
} 
二维数组的定义方式二

int[][] arr = new int[3][]

第二种方式和第一种类似,只是数组中每个元素的长度不确定

示例代码:
//只是数组中每个元素的长度不确定并且没有赋初始值,取到的是 null 
//赋值后取到的是数组的内存地址 
class Demo2 { 
  public static void main(String[] args) { 
    int[][] arr = new int[3][];//这是一个二维数组,这个二维数组中有三个一
维数组,三个一维数组都没有被赋值 
    System.out.println(arr[0]); 
    System.out.println(arr[1]); 
    System.out.println(arr[2]); 
    System.out.println("------------------"); 
    arr[0] = new int[3];          //第一个一维数组中可以存储三个int值 
    arr[1] = new int[5];          //第二个一维数组中可以存储五个int值 
    System.out.println(arr[0]); 
    System.out.println(arr[1]); 
    System.out.println(arr[2]); 
  } 
} 
二维数组的定义方式二

int[][] arr = {{1,2},{3,4,5,6},{7,8,9}
上面的二维数组中定义了三个元素,这三个元素都是数组,分别为{1,2}、{3,4,5,6}、{7,8,9}

示例代码
class Demo4_Array { 
  public static void main(String[] args) { 
    int[][] arr = {{1,2,3},{4,5},{6,7,8,9}}; //这是一个二维数组,这个二
维数组中每个大括号都代表一个一维数组 
    System.out.println(arr);        //[[I@xxxxx,二维数组的地址值 
    System.out.println(arr[0]);        //[I@xxxx,一维数组的地址值
    System.out.println(arr[0][0]);      //1,一维数组中的元素值 
  } 
} 

二维数组赋值、遍历方式与一维数组类似。

二维数组赋值
public class Demo15 { 
  public static void main(String[] args) { 
    int[][] arr = new int[3][4]; 
    //arr[0] 是一个数组 
    arr[0][0] = 10; 
    arr[2][1] = 100; 

    System.out.println("arr[0][0]:"+arr[0][0]); 
    System.out.println("arr[2][1]:"+arr[2][1]); 
  } 
} 
二维数组遍历
class Demo1 { 
  public static void main(String[] args) { 
    int[][] arr = {{ 1, 2, 3 }, { 4, 5 }, { 6, 7, 8, 9 } }; 
    for (int i = 0; i < arr.length; i++) { // 获取到每个二维数组中的一维数组 
      for (int j = 0; j < arr[i].length; j++) { // 获取每个一维数组中的元素 
        System.out.print(arr[i][j] + " "); 
      } 
      System.out.println(); 
    } 
  } 
}

方法

方法的语法格式

在 Ja 中,声明一个方法的具体语法格式如下

修饰符 返回值类型 方法名(参数类型 参数名 1,参数类型 参数名 2,......){
执行语句(方法体)
………
return 返回值;
}

方法格式解释
修饰符:后面会详细介绍。目前记住:public static
返回值类型:用于限定返回值的数据类型
方法名一个名称:为了方便我们调用方法
参数类型:限定调用方法时传入参数的数据类型
参数名:是一个变量,接收调用方法时传入的参数
方法体:完成功能的代码
return:结束方法以及返回方法指定类型的值,返回结果给调用者

示例代码
//求两个数的和
public static int sum1(int a, int b){ 
  int sum = (a + b); 
  //System.out.println("和是:"+ sum); 
  return sum; 
}
参数传递(形参和实参)

参数传递,可以理解当我们要调用一个方法时,我们会把指定的数值,传递给方法中的参数,这样方法中的参数就拥有了这个指定的值,在方法中就可以使用该值进行相应的运算了。这种传递方式,我们称为参数传递

形参和实参
在定义方法时,参数列表中的变量,我们称为形式参数
调用方法时,传入给方法的数值,我们称为实际参数

代码示例:编写求和方法,并调用,观察形参和实参
class Demo { 
    public static void main(String[] args) { 
        int sum = sum(3, 5); // 调用方法时,传入的数值称为实际参数 
        System.out.println(sum); 
    } 
    public static void sum(int a, int b){// 方法中指定的多个参数称为形式参数 
      int sum = (a + b); 
      System.out.println("和是:"+ sum);   
    } 
} 
方法的注意事项
  1. 方法不调用不执行
  2. 方法与方法是平级关系,不能嵌套定义
  3. 方法定义的时候参数之间用逗号隔开
  4. 方法调用的时候不用在传递数据类型
  5. 如果方法有明确的返回值,一定要有 return 带回一个值

方法重载

在同一个类中,存在一个以上的同名方法,只要它们的参数个数或者参数类型(形参列表)不同即可。

方法重载的特点

与返回值类型无关,只看方法名和参数列表

示例代码:在类里面定义多个计算和的方法,方法名一致,但是方法参数列表不一致
class Test3_Overload { 
  // main 的方法 
  public static void main(String[] args) { 
      int a = 10; 
      int b = 20; 
      int c = 30; 
      int e = 40; 
      sum(a,b); 
      sum(a,b,c); 
      sum(a,b,c,d); 
    //调用不同参数类型的重载方法 
    sum(15.5,15.5); 
  } 
  /** 
   * 计算两个参数和 
   */ 
  public static void sum(int a, int b) { 
    int sum = (a + b); 
    System.out.println("和是:" + sum); 
  } 
  /** 
   * 计算三个参数和 
   */ 
  public static void sum(int a, int b, int c) { 
    int sum = (a + b + c); 
    System.out.println("和是:" + sum); 
  } 
  /** 
   * 计算四个参数和 
   */ 
  public static void sum(int a, int b, int c, int d) { 
    int sum = (a + b + c + d); 
    System.out.println("1和是:" + sum); 
  } 
  //方法参数类型不同,也称为重载 
  public static void sum(double a, double b) { 
    double sum = (a + b); 
    System.out.println("和是:" + sum); 
  } 
} 

可变参数方法

在 JDK5 中提供了变长参数(varargs),也就是在方法定义中可以使用个数不确定的参数,对于同一方法可以使用不同个数的参数调用
例如上面的例子:sum(a,b)、sum(a,b,c);、sum(a,b,c,d);
在具有可变长参数的方法中可以把参数当成数组使用,例如可以循环输出所有的参数值

示例代码,关注 sum方法即可
class Test3_Overload { 
  // main 的方法 
  public static void main(String[] args) { 
      int a = 10; 
      int b = 20; 
      int c = 30; 
      int e = 40; 
    sum(a,b); 
    sum(a,b,c); 
    sum(a,b,c,d); 
  } 
  /** 
   * 可以定义任意参数长度的方法 
   */ 
  public static void sum(int... a) {// a 可以当做是一个数组来使用 
    int sum = 0; 
    for (int i = 0; i < a.length; i++) { 
      sum += a[i]; 
    } 
    System.out.println("和是:"+sum); 
  } 
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值