---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
7.函 数:为了提高代码的复用性,可以将其定义成一个单独的功能,该功能的体现就是java中的函数。函数就是体现之一。
java中的函数的定义格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数1,…){
执行语句;
return 返回值;
}
当函数没有具体的返回值时,返回的返回值类型用void关键字表示。
如果函数的返回值类型是void时,return语句可以省略不写的,系统会帮你自动加上。
return的作用:结束函数。结束功能。
如何定义一个函数?
函数其实就是一个功能,定义函数就是实现功能,通过两个明确来完成:
1)、明确该功能的运算完的结果,其实是在明确这个函数的返回值类型。
2)、在实现该功能的过程中是否有未知内容参与了运算,其实就是在明确这个函数的参数列表(参数类型&参数个数)。
函数的作用:
1)、用于定义功能。
2)、用于封装代码提高代码的复用性。
注意:函数中只能调用函数,不能定义函数。
主函数:
1)、保证该类的独立运行。
2)、因为它是程序的入口。
3)、因为它在被jvm调用。
函数定义名称是为什么呢?
答:1)、为了对该功能进行标示,方便于调用。
2)、为了通过名称就可以明确函数的功能,为了增加代码的阅读性。
重载的定义是:在一个类中,如果出现了两个或者两个以上的同名函数,只要它们的参数的个数,或者参数的类型不同,即可称之为该函数重载了。
如何区分重载:当函数同名时,只看参数列表。和返回值类型没关系。8.数 组:用于存储同一类型数据的一个容器。
好处:可以对该容器中的数据进行编号,从0开始。数组用于封装数据,就是一个具体的实体。
如何在java中表现一个数组呢?两种表现形式。
1)、元素类型[] 变量名 = new 元素类型[元素的个数];
2)、元素类型[] 变量名 = {元素1,元素2...};
元素类型[] 变量名 = new 元素类型[]{元素1,元素2...};
内存结构:
1:寄存器。2:本地方法区。3:方法区。4:栈。5:堆。
栈:存储的都是局部变量 ( 函数中定义的变量,函数上的参数,语句中的变量 );
只要数据运算完成所在的区域结束,该数据就会被释放。
堆:用于存储数组和对象(通过new建立),也就是实体。啥是实体啊?就是用于封装多个数据的。
1:每一个实体都有内存首地址值。
2:堆内存中的变量都有默认初始化值。因为数据类型不同,值也不一样。
3 :垃圾回收机制。数组操作常见的两个问题:
数组脚标越界异常(ArrayIndexOutOfBoundsException)
int[] arr = new int[2];
System.out.println(arr[3]);
访问到了数组中的不存在的脚标时发生。
空指针异常(NullPointerException)
int[] arr = null;
System.out.println(arr[0]);
arr引用没有指向实体,却在操作实体中的元素时。
对数组操作最基本的动作就是存和取。
核心思想:就是对角标的操作。
/**
* 1.需要进行比较,并定义变量记录住每次比较后的较大值
* 2.对数组中的元素进行遍历和变量中记录的元素进行比较
* 如果遍历到的元素大于变量中记录的元素,就用变量记录住该最大值
* 3.遍历结果,该变量记录就是最大值
* 定义一个功能来实现:
* 明确一:结果 是数组中的元素,int
* 明确二:未知内容,数组
*/
public class Test10Demo {
public static void main(String[] args) {
int[] arr={3,4,6,7,2,1,27,109,56};//定义一个arr数组
int max=getMax(arr);//获取最大值
System.out.println("max="+max);//输出结果
}
public static int getMax(int[] arr)
{//定义变量记录最大值
int maxindex=0;//初始化数组中任意角标
for(int x=1;x<arr.length;x++)
{//for循环
if(arr[x]>arr[maxindex])
maxindex=x;
}
return arr[maxindex];
}
}
/**
*冒泡排序
*/
public class Test10Demo {
public static void printArray(int[] arr)
{ //遍历 数组
System.out.print("[");
for(int x=0;x<arr.length;x++)
{ if (x!=arr.length-1)
System.out.print(arr[x]+",");
else
System.out.println(arr[x]+"]");
}
}
public static void main(String[] args)
{
int[] arr={34,19,11,109,3,56};//定义一个arr数组
System.out.println("打印前:");//打印
printArray(arr);
bubblesort(arr);
System.out.println("打印后:");
printArray(arr);
}
public static void bubblesort(int[] arr)
{
for(int x=0;x<arr.length-1;x++)
{
for(int y=0;y<arr.length-1-x;y++)
/*内循环:-1:为了避免角标越界
-x:为了让外循环增加一次,内循环参数
与比较的元素个数递减
*/
{
if(arr[y]>arr[y+1])
{
int temp=arr[y];
arr[y]=arr[y+1];
arr[y+1]=temp;
}
}
}
}
}
/**
*选择排序
*/
public class Test10Demo {
//遍历数组的功能
public static void printArray(int[] arr)
{
System.out.print("[");
for(int x=0;x<arr.length;x++)
{ if (x!=arr.length-1)
System.out.print(arr[x]+",");
else
System.out.println(arr[x]+"]");
}
}
public static void main(String[] args)
{
int[] arr={34,19,11,109,3,56};//定义一个arr数组
System.out.println("打印前:");
printArray(arr);
selectsort(arr);
System.out.println("打印后:");
printArray(arr);
}
public static void selectsort(int[] arr)
{//for循环
for (int x=0;x<arr.length-1;x++)
{
for(int y=x+1;y<arr.length;y++)
{
if(arr[x]>arr[y])
{
int temp=arr[x];
arr[x]=arr[y];
arr[y]=temp ;
}
}
}
}
}
/**
*<strong>二分查找,必须有前提:数组中的元素要有序。</strong>
*/
public class Test10Demo {
public static void main(String[] args)
{
int[] arr={13,15,19,28,33,45,78,106};//定义一个arr数组
int index=halfSearch(arr,78);//查找数组中元素
System.out.println("index="+index);//输出结果
}
public static int halfSearch(int[] arr,int key)
{
int max,min,mid;
min=0;
max=arr.length-1;
while(min<=max)
{
mid=(max+min)>>1;
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
else
return mid;
}
return -1;
}
}
/**
*进制转换
*/
public class Test10Demo {
public static void main(String[] args)
{
toHex(26);
toBinary(-26);
toOctal(26);
System.out.println(Integer.toBinaryString(-26));//输出结果
}
//十进制-->十六进制
public static void toHex(int num)
{
trans(num,15,4);
}
//十进制-->二进制
public static void toBinary(int num)
{
trans(num,1,1);
}
//十进制-->八进制
public static void toOctal(int num)
{
trans(num,7,3);
}
public static void trans(int num,int base,int offset)
{
if(num==0)
{
System.out.println("0");
return;
}
char[] chs={'0','1','2','3','4',
'5','6','7','8','9',
'A','B','C','D','E','F'};//定义一个查表数组
char[] arr=new char[32];
int pos=arr.length;
while (num!=0)//判断临时容器
{
int temp=num & base;
arr[--pos]=chs[temp];
num=num>>>offset;
}
for(int x=pos;x<arr.length;x++)
{
System.out.print(arr[x]); //打印数组
}
System.out.println();
}
}
二维数组:
格式1:int[][] arr = new int[3][2];
定义了名称为arr的二维数组;
二维数组中有3个一维数组;
每一个一维数组中有2个元素;
一维数组的名称分别为arr[0], arr[1], arr[2];
给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78;
格式2:int[][] arr = new int[3][];
二维数组中有3个一维数组;
每个一维数组都是默认初始化值null;
可以对这个三个一维数组分别进行初始化;
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2];
格式3:int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};
定义一个名称为arr的二维数组;
二维数组中的有三个一维数组;
每一个一维数组中具体元素也都已初始化;
第一个一维数组arr[0] = {3,8,2};
第二个一维数组arr[1] = {2,7};
第三个一维数组arr[2] = {9,0,1,6};
第三个一维数组的长度表示方式:arr[2].length;
注意特殊写法情况:int[] x,y[]; x是一维数组,y是二维数组。
/**
*获取arr数组中所有元素的和。
*使用for的嵌套循环即可
*/
public class Test10Demo {
public static void main(String[] args) {
int sum=0;//定义变量初始化
int[][] arr={{3,8,2},{2,7},{9,0,1,6}};//定义一个arr二维数组
for(int x=0;x<arr.length;x++)//for循环
for(int y=0;y<arr[x].length;y++){
sum+=arr[x][y];
}
System.out.println("sum="+sum);//输出结果
}
}<span style="font-family: Arial; background-color: rgb(255, 255, 255);"> </span>
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------