03-方法与数组

方法概述与定义

方法介绍

就是一个小功能。把一段代码存起来,以后可以重复使用。

static void printB() {
    System.out.println("b");
    System.out.println("b");
    System.out.println("b");
    System.out.println("b");
}

方法注意点

方法参数

完整形式




方法返回值

给定两个字符串 把两个字符串拼接到一起 并返回。

驼峰命名法

第一个字母小写,后面的每一个单词首字母大写。

static String stringConcat(String str1,String str2) {
    //System.out.println(str1 + str2);
    String res = str1 + str2;
    return res;
}

方法重载

概念

在同一个类中,允许方法名称相同,但是方法的参数必须不同
方法 的重载解决了,功能相同,参数不同,就不需要定义多个方法名称了

方法的重载的规则

方法名称必须相同。
参数列表必须不同。
方法的返回类型可以相同也可以不相同。
仅仅返回类型不同不足以称为方法的重载。

数组

概念

它是把相同的数据类型有序的组成在一起, 我们称这样的集合为数组。
相同的数组类型
有序的组成在一起

格式

数据类型[] 数组的名称 = new 要存放的数据类型[]{存放指定数据类型的内容}

规则

数组初始化

静态初始化

在创建数组时,就已经确定了有多少个元素,
并且把元素都放到了数组当中

//int[] ages = new int[] {21,22,23,21,25};
String[] names = new String[] {"zs","ls","wc"};
//先定义,再赋值
int a;
//System.out.println(a); 直接使用是错误的
a=10;
int[] ages;
//System.out.println(ages); 直接使用是错误的
//如果不初始化,数组是不能使用的。
ages =  new int[] {21,22,23,21,25};
String name = names[1];
System.out.println(name);

动态初始化

一开始不知道要存哪些数数据。所以先定义一个指定的空间大小

String[] allPerson = new String[100];
allPerson[0] = "zs";
allPerson[1] = "ls";
//ArrayIndexOutOfBoundsException:数组越界
System.out.println(allPerson[101]);

数组长度

获取数组元素的个数: 数组名称.length

取出数组当中每一个元素

排序算法

冒泡排序

演示地址:http://www.jsons.cn/sort/

升序为例

第1步

从头开始比较每一对象元素,如果第1 个比第2个大就交换他们的位置
执行完一轮后, 最大的元素 在最后

第2步

当执行完一轮后, 最大的元素,在后面

还要继续执行和第1轮相同的操作,索引的最大值要-1

int arr[] ={7,4,3,6,9};
for (int end = arr.length; end > 0; end--){
    for (int begin = 1; begin < end; begin++){
        if (arr[begin] < arr[begin -1]){ //左边的数比右边的大
            //交换两个数的位置
            int temp = arr[begin];
            arr[begin] = arr[begin -1];
            arr[begin-1] = temp;
        }
    }
}
System.out.println(Arrays.toString(arr));

选择排序

从序列中找出最小的元素,然后与第一个元素进行交换

执行完一轮后, 第一个元素就是最小的

每交换一次最小的值,位置向后移动一个

for (int start = 0; start < arr.length; start++) {
    //定义一个变量  记录最小值的角标
    int minIndex = start;
    for (int next = start + 1;next <= arr.length - 1; next++)
    {
        if ( arr[next] < arr[minIndex]){
            minIndex = next;
        }
    }
    //拿最小的值 , 与第一个元素进行交换
    int temp = arr[start];
    arr[start] = arr[minIndex];
    arr[minIndex] = temp;
}

二分查找算法

什么是二分查找

二分查找(binary search)又叫折半查找,它是一种在有序数组中查找某一特定元素的搜索算法

二分查找必要条件

  • 必须为顺序存储结构
  • 必须按关键字大小有序排列

原理

原理分析

将有序数组分为三个部分:中间值前(中间值数之前的一组数据)、中间值、中间值后(中间值之后的一组数据)

将要查找的数与中间值的数相比较,等于则退出查找,小于则在中间值前进行比较,大于在在中间值后进行比较,依次循环操作,直至查找到对应的值为止;当要查找数据结构为偶数时,中间值 mid 应向下取整处理;

代码实现

 public static int binarySearch(int[] nums, int target) {
     int low = 0;
     int high = nums.length - 1;
     if (low > high || target > nums[high] || target < nums[low]){
         return -1;
     }
     while(low <= high) {
         //取中间值
         int mid = (high + low) / 2;
         //等于则退出查找
         if(nums[mid] == target)
             return mid;
         else if (nums[mid] < target)
             //小于则在中间值前进行比较
             low = mid + 1;
         else if (nums[mid] > target)
             //大于在在中间值后进行比较
             high = mid - 1;
     }
     return -1;
 }

二维数组

概念

在数组当中存放 的每一个元素又是一个数组

格式

int[] classAge1 =  {18,19,20,17};
int[] classAge2 =  {18,19,20};
int[] classAge3 =  {18,19};
//整个年级的年龄
//int[][] allClassAges = new int[][] {classAge1,classAge2,classAge3};
int[][] allClassAges =  new int[][] {
    {18,19,20,17},
    {19,19,20},
    {30,19}
};

二维数组遍历

for(int i = 0; i <  allClassAges.length; i++) {
    int[] array = allClassAges[i];
    for(int j = 0; j < array.length; j++) {
        System.out.println(array[j]);
    }
}

快速遍历

普通遍历

int[] ages = {10,20,30};
//遍历数组
for(int i = 0; i < ages.length; i++) {
    System.out.println(i);
    System.out.println(ages[i]);
}

快速遍历

//遍历数组foreach
//for (数组类型  遍历出来的元素 : 数组的名称)
for (int i : ages) {  //是一个语法糖
    System.out.println(i);
}
String[] names = {"zs","ls","xq","123"};
for (String name : names) {
    System.out.println(name);
}

可变参数

数组当作参数传递

static void sum(int[]args) {  //把数组当作参数进行传递
    int res = 0;
    for(int i  = 0; i < args.length; i++) {
        res = res + args[i];
    }
    System.out.println(res);
}

可变参数

static void sum(int...args) {  //语法糖
    int res = 0;
    for(int i  = 0; i < args.length; i++) {
        res = res + args[i];
    }
    System.out.println(res);
}
public static void main(String[] args) {
    int[] params = {1,2,3,4};
    sum(params);
    sum(1,2,3,4);
}

变量作用域

什么是作用域

生效(能使用的范围)的范围

变量作用域

生效范围是:在创建变量的大括号当中生效。超过了大括号就不生效(不能再使用了)

在方法内部定义的变量,跟外界没有任何关系


test();
int a  = 10;
System.out.println(a);
{  //代码块
    int b = 20;
    System.out.println(b);
}//b过完大括号就没有了
int b = 30;
posted @ 2020-05-23 16:42  Leader_TBlog  阅读(78)  评论(0编辑  收藏  举报