方法与数组

方法概述与定义
方法介绍
就是一个小功能。把一段代码存起来,以后可以重复使用
示例

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

方法注意点

  • 注意点:

    • 1.方法必须声明到类(class)当中
    • 2.创建的方法要定义在其它方法之外(跟其它的方法是兄弟关系)
    • 3.定义方法不分先后顺序
    • 4.如果一个方法前面有static,那么在该方法当中调用其它的方法前面也应该有static
    • 5.一个类当中可以写多个方法
    • 6.两个方法的名称不能相同
    • 7.方法必须得要先定义,再执行。
      示例

    参数
    完整形式

     * 方法的完整形式:
     * [修饰符] 返回值类型 方法名([形式参数...]){
     * 	方法体(要重复使用的代码)
     * 	[return 值]
     * }
     * void 返回值为空    什么都不返回 , 如果有返回值 ,里面必须得要有return 
    

示例
方法返回值

		/**
         * 求两个数的和
 		 * @param a   第一个数
		 * @param b   第二个数
		 * 在此处声明的变量,只在方法当中有效。
		 * 出了方法,就没有效果,外界的名称也不会影响里面
		 * return后面是什么 类型,那么 定义返回值时,就要定义什么 类型。
		 * 定义了有返回值 ,接不接收返回值都可以
		 */
		static int sum(int a,int b) {
			 int res =	a + b;
			 return res;
		}

给定两个字符串 把两个字符串拼接到一起 并返回
驼峰命名法:第一个字母小写,后面的每一个单词首字母大写
示例

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

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

方法的重载的规则:
1)方法名称必须相同。
2)参数列表必须不同。
3)方法的返回类型可以相同也可以不相同。
4)仅仅返回类型不同不足以称为方法的重载。		

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

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

规则
	/**
	 * 数组:帮我们存放相同类型的东西的。
	 *       1.存放 的东西必须得是相同 的数据类型
	 *       2.存放的东西都是有序的。可以通过角标来获取存的内容
	 */

数组初始化
静态初始化:在创建数组时,就已经确定了有多少个元素,并且把元素都放到了数组当中
示例

	//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
示例

	//给定数组按指定格式打印数组:["zs","ls","ww","xm","xh","xq","qq"]	
	static void printArray(String[] array ) {
	String res = "[";
	//1.遍历每一个元素,
	for(int i = 0; i < array.length; i++) {
		//2.与res进行拼接
		res = res + array[i];
		//3.每遍历一个元素拼接后, 在res后再拼接一个","
		// 如果是最一个元素, 就不拼接“,”
		if(i  == array.length - 1) {
			break;
		}
		res = res + ",";
	}
	//4.所 有的元素遍历完毕,再去往res之后拼接“]”
	res = res + "]";
	System.out.println(res);
}

指定格式逆序打印数组

	static void printArray(String[] array) {
	String res = "[";
	//1.倒着遍历每一个元素
	for(int i = array.length-1; i >= 0;i--) {
		//2.与res进行拼接
		res = res + array[i];
		//3.每遍历一个元素拼接后, 在res后再拼接一个","
		// 如果是第一个元素, 就不拼接“,”
		if(i  == 0) {
			break;
		}
		res = res + ",";
	}
	//4.所 有的元素遍历完毕,再去往res之后拼接“]”
	res = res + "]";
	System.out.println(res);
}

排序算法:
冒泡排序

//升序为例
	//第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)又叫折半查找,它是一种在有序数组中查找某一特定元素的搜索算法。

二分查找必要条件:
1)必须为顺序存储结构
2)必须按关键字大小有序排列
原理:
将有序数组分为三个部分
中间值前(中间值数之前的一组数据)
中间值
中间值后(中间值之后的一组数据)
将要查找的数与中间值的数相比较
等于则退出查找
小于则在中间值前进行比较
大于在在中间值后进行比较,依次循环操作,直至查找到对应的值为止;
当要查找数据结构为偶数时,中间值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;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值