java基础学习之函数、数组
2018-03-31 14:47
381 查看
1、函数
1、函数的定义函数是定义在类中有特定功能的一小段程序,也称方法。定义格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2, )
{
执行语句;
return 返回值;
}
2、功能
定义函数可以对功能代码进行封装,提高代码的复用性,减少代码的重复度,提升程序的可读性。函数只有被调用时才会执行。
3、函数的重载
同一个类中可以允许出现同一个函数名的多个函数,只要他们的参数不同即可,函数重载即是函数名相同,参数不同,参数的顺序不同也叫做参数不同。
重载实例:
//返回两个整数的和 int add(int x,int y){return x+y;} //返回三个整数的和 int add(int x,int y,int z){return x+y+z;}
下面这一句不是重载:
double add(int x,int y){return x+y;}
在同一个类中函数名参数相同,但是返回值不同,这个会引起混乱,是不允许存在于一个类中的。
2、一维数组
1、定义方法int[] arr = new int[5]; int[] arr1 = {1,2,3}; int[] arr2 = new int[]{1,2,3}; int arr3[] = new int[3];
这四种方法都可以。
2、内存分配
如果这个数组是在方法中定义一句int[] arr = new int[5];,那么他的内存分配如下:
并且默认情况下,数组元素的值为0,内存是连续的。
3、常见异常
①、越界
int[] arr = new int 4000 [5]; System.out.println(arr[5]);
②、空指针
int[] arr = null; System.out.println(arr[5]);
4、获取最值
public int getMax(int[] arr){ int max = arr[0]; for (int i = 1; i < arr.length; i++) { if(arr[i]>max) //最小值这里改为小于就可以 max = arr[i]; } return max; }
5、简单排序(从小到大)
①、选择排序(将小的放在前面)
思路:从第一个数开始,不停与后面的数比较,随小就放在第一位,然后类似的第二个数,直到倒数第二个数与最后一个数比完后,排序完成。
public static void sort1(int[] arr){ //从第一个数到倒数第二个数 for (int i = 0,temp = 0; i < arr.length-1; i++) { //与后面一个数到最后一个数比较 for (int j = i+1; j < arr.length; j++) { if(arr[i] > arr[j]){ //顺序交换 temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } }
②、冒泡排序(将大的放在后面)
思路:从标号0开始将前一个数和后一个数比较,大的放后面,然后标号加1,再比,比到最后两个一轮结束,然后从标号0开始比到倒数第二个和倒数第三个。。。。最后从标号0开始和标号1比,比完排序完成
public static void sort2(int[] arr){ for (int i = 0,temp =0 ; i < arr.length-1; i++) { for (int j = 0; j <arr.length - i - 1 ; j++) { if(arr[j]>arr[j+1]){ temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } }
6、进制转化(将十进制转化为其他进制并且用数组保存)
思路:写一个映射表,包含了字符0到字符A总共16个字符,对于二进制每次与上1取出最后一位,保存这个位到数组,然后右移一位,继续与,整个过程通过循环实现,循环结束的条件是十进制的数为0.对于转八进制和十六进制的思路一样,只是十六进制每次与15,右移4位,八进制与7,右移三位。
public static void changeSystem(int num,int base,int offset){ char[] cc = new char[32]; int i = 0; //当需要转化的数不为0 while(num != 0){ //保存对应的位 cc[i++] = table[num&base]; //将这个数右移 num = num >>>offset; } for (int j= i-1; j >= 0; j--) { System.out.println(cc[j]); } } //转二进制 public static void toBinary(int num){ changeSystem(num,1,1); } //转十六进制 public static void toHex(int num){ changeSystem(num,15,4); } //转八进制 public static void toOctal(int num){ changeSystem(num,7,3); }
7、折半查找
思路:用三个变量保存标号,一个是min初始指向0,一个值max默认指向最后一个数,mid等于min+max的和的一半,然后循环中不同比较要找的值和mid指向的值是否相等,相等就返回,大于min的标号等于mid右移一位,再算mid比,如果小于就将max指向mid左边一位,再比,等到min的值大于max的时候,循环退出。
public static int indexOfValue(int num,int[] arr){ int max = arr.length - 1; int min = 0; int mid = (max + min)/2; //min小于max才比较,否则退出, while(min <= max){ if(num > arr[mid]){ min = mid + 1; mid = (max + min)/2; }else if (num <arr[mid]) { max = mid - 1; mid = (max + min)/2; }else { return mid; } } return -1; }
8、折半查找可以用于有值要插入到有效数组里面求插入位置的情况
思路:利用上面的折半查找,如果插入的值原来的数列有,那么直接返回mid即可,如果没有就返回min举个例子,在3和5之间插入4,这个时候,min和max都指向了3,那么4和三比大于,那么min加1,退出循环,这个时候的min正好就是需要标号:
public static int getIndexOfInsert(int num,int[] arr){ int max = arr.length - 1; int min = 0; int mid = (max + min)/2; while(min <= max){ if(num > arr[mid]){ min = mid + 1; mid = (max + min)/2; }else if (num <arr[mid]) { max = mid - 1; mid = (max + min)/2; }else { return mid; } } return min; }
2、二维数组
1、定义格式二维数组其实就是数组中的数组,一个数组有三个格子,然后每个格子里面又存了一个数组。
定义格式:
int[][] arr = new int[3][2]; int[][] arr = new int[3][]; int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};
除了这三格式外,还可以将前面的[]任意移动如:int[] arr[] int arr[][]都可以。
第一种定义方法表示定义了一个二维数组,三行两列,第二个定义方法是定义了一个二维数组,三行,列还没有定义,也就是,这个二维数组分为三个一位数组,arr[0] 指向null,arr[1],指向null,arr[2]指向null;第三种情况表示,arr[0] = {3,8,2},arr[1]={2,7},arr[2]={9,0,1,6}.
2、内存分配
相关文章推荐
- java学习笔记:Java语法基础2(循环,函数,重载,数组,方法)
- JAVA基础学习(三)---程序结构与控制、函数与数组入门
- JAVA基础第三天学习日记_循环语句、函数、数组
- 黑马程序员_java基础学习笔记03_函数以及数组知识
- java基础学习_数组
- 黑马程序员 java基础 函数 数组 查找与排序总结
- Java笔记1 Java编程基础<2>循环语句、函数(重载)、变量和数组的内存结构
- Java学习之旅基础知识篇:数组及引用类型内存分配
- 【Java学习笔记】基础知识学习4【数组的基本知识】
- 黑马程序员——java第四天:基础语法(函数、数组)
- 黑马程序员_java基础二(语句,函数method和数组Array)
- Java基础03:循环结构;函数;重载;数组
- Java学习备忘录(二)基础语法和数组(原创)
- 【Java学习笔记】基础知识学习5【数组排序,复制】
- 黑马程序员_ Java基础(函数,数组)
- 黑马程序员_java基础(2) 流程控制语句&函数与数组
- Java基础学习笔记(二)数组,包装类
- 黑马程序员------java学习笔记之数组基础
- Java语言基础(三)-函数、数组
- 黑马程序员_毕向东_Java基础_DAY03_函数_学习笔记