黑马程序员_Java学习日记num3

------- java培训,android培训、期待与您交流! ----------

学习内容:循环结构(while语句,do....while语句,for语句);break和continue语句;函数(函数的定义,应用,特性重载);

     数组(一维数组,二维数组);(十进制通过函数封装转二、八、十六进制;选择排序,冒泡排序;以及二分查找)

一、循环结构
1,while语句
格式:
  while(条件表达式)
  需要循环操作的语句;
  特点:先判断条件表达式是否满足条件,来决定执行循环操作与否
2、do....while 语句
格式:
do
{ 需要循环操作的语句;}
while(条件表达式)
 特点:先执行循环语句,然后再判断是否满足条件来决定是否第二次进入循环。所以,do....while语句,不论条件是否满足,都至少会被执行一次
3、for语句
格式:
for(初始表达式;循环条件表达式;循环操作表达式)
  循环操作执行语句;
  特点:
  A,for语句执行流程为:初始化表达式如果存在的话,先执行初始化表达式并且只会被执行一次,然后判断循环条件表达式是否为真,满足,则执行循环操作执行语句,然后执               行循环操作表达式;再判断循环条件表达式是否满足,满足,则执行循环操作执行语句,接着执行循环操作表达式。。。。。。。。。。
  B,对于初始化表达式和循环操作表达式可有可无,并且如果想写多个表达式也可以,中间使用逗号隔开即可。
4,死循环
  两个常用到的死循环格式:
for(;;) while(true)
循环操作语句 循环操作语句
5,for语句和while语句的使用区别
  for语句可以将循环增量定义在for语句中,如果for语句结束后,定义的循环增量就自动释放内存,并且不能再或者循环增量的值。
  while语句需要将循环增量定义在while语句外面,当while语句结束后,定义的循环增量还可以继续被使用。
  综上所述,for与while二者可以相互转换,什么时候使用for 什么时候使用while,关键是看对内存的管理以及循环结束后是否还使用循环增量。
二、break和continue语句
1,break语句
break既可以应用到选择结构中,也可以用到循环结构中。在选择结构中,意味着选择语句的结束;在循环语句中,则是跳出当前的训话语句。break还有一个特点,如果循环有很多层,在最外层循环钱定义一个标号,使用
break 标号名,则可以直接跳出这个多层循环 。还有,标号仅用于循环,给循环起名字。
2,continue语句
continue语句只可以用于循环结构,意思是跳出本次循环,继续下一次循环。
3,break和continue的一些共同特点
这两个语句离开应用范围,存在是没有意义的
这两个语句单独存在下面都不可以有语句,因为执行不到,就是废话。
三、函数
1,函数的定义:
函数就是定义在类内部的具有特定功能的一段独立运行的小程序,函数也成为方法。
函数内部不可以定义函数,函数只可以调用函数。
2,函数定义的格式:
修饰符 返回值类型 函数名(参数类型 参数名称....)
{
函数执行语句;
return 返回值;
}
3,函数的一个重要特性---重载(overload)
重载概念:在同一个类中,允许存在一个以上的同名函数,只要他们的参数类型或者参数个数不同即可。
重载的特点:与返回值类型无关,只看参数列表
什么时候使用重载?当定义的功能相同,但是参与运算的未知内容不同,那么,这时定义一个函数名称以表
 示其功能,方便阅读,而通过参数列表的不同来确定使用哪一个同名函数。
四,数组
数组:同一类型数据的集合。数组其实就是一个容器。
(一)、一维数组
1,定义格式:
元素数据类型[ ] 数组名称 = new 元素数据类型 [ 元素个数或者数组长度 ]
例如: int[ ] arr = new int[4];
元素数据类型[ ] 数组名称 = new 元素数据类型[ ]{元素1,元素2,元素3..........}
例如: int[ ] arr = new int[ ]{3,4,5,6,623,33}
元素数据类型[ ] 数组名称 ={元素1,元素2,元素3..........}
例如: int[ ] arr = {2,3,4,5,6,}
2,数组在初始化或者使用的过程在中容易出现两个异常
ArrayIndexOutOfBoundsException 数组下标越界异常 通常是使用了不存在的数组索引造成的
NullPointerException 空指针异常 通常是由于使用了未被初始化的数组造成的
(二)、二维数组
二维数组就是在数组中定义数组。在二维数组中,里面的小一维数组的长度是可以不同的。
1,定义方法。例如:定义一个二维数组,这个二维数组中有3个一维数组,每个一维数组中有四个int类型的元素。
int[ ][ ] arr = new int[3 ][4 ];
2,一些问题
A,定义int[ ][ ] arr = new int[3 ][4 ];
那么执行下面打印语句的结果是:
System.out.println(arr);//打印的结果是二维数组的地址值
System.out.println(arr[0]);//打印的结果是二维数组中第一个一维数组的地址值。
System.out.println(arr.length);//3。 打印的是二维数组中元素个数,即有一个一维数组
System.out.println(arr[0].length);//4 打印的是二维数组中第一个一维数组有几个元素
B,定义int[ ][ ] arr = new int[3 ][ ],上面的这个二维数组,仅仅指定了里面包含几个小数组,没有制定小数组中有几个元素。执行下面两个打印语句的结果是:
System.out.println(arr);//打印的结果是二维数组的地址值
System.out.println(arr[0]);//打印的结果是null。因为里面的一维数组未被初始化。
C,定义下面两个数组定义int[ ][ ] arr = new int[3 ][4 ],定义int[ ][ ] arr1 = new int[3 ][ ],则下面的打印结果为
System.out.println(arr[0][0]);//结果是0 因为数组存放在堆内存中,对内存中的变量都有默认初始化值。int类型为0,引用类型为null,布尔类型为false
System.out.println(arr1[0][0]);//会跑出空指针异常,因为第一个小数组没有被初始化,她的地址值为null。
五、其他一些知识点
1,冒泡排序
思路:冒泡排序每轮排序都是相邻元素之间进行比较,每轮结束后会产生一个元素在其最终位置上。每轮排序结束后,下一轮比较都会减少一个元素。代码如下:
public static void bubbleSort(int[] arr)
{
for(int i = 0; i < arr.length; i++)
for(int j = 0; j < arr.length-i-1; j++)
{
if(arr[j] > arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
2,选择排序
选择排序每次都是找一个固定的元素和其他元素相比,每次排序完成后,都会产生一个在最终位置的元素,则接下来的排序就会一个元素
public static void selectSort(int[] arr)
{
for(int i = 0; i < arr.length; i++)
for(int j = 0; j < arr.length; j++)
{
if(arr[i] < arr[j])
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
3,二分查找
二分查找的数组必须是有序的,即数组元素从大到小排列。当给出一个元素key,查看其是否在数组中,如果存在返回她的下标,否则返回-1;
public static int halfSearch(int[] arr,int key)
{
int min = 0,max = arr.length,mid;
mid = (min+max)/2;
while(arr[mid] != key || min < max)
{
if(key > arr[mid])
{
min = mid + 1;
mid = (min + max)/2;
}
else if(key < arr[mid])
{
max = mid - 1;
mid = (min + max)/2;
}
else
return mid;
}
return -1;
}
4,十进制转任意进制的数据
十进制数据(包括负数)转换为任意进制的数据,其中需要三个参数,num是被转换的十进制数据,base是转换的基数,offset是在转换的过程中需要右移的位数。代码如下:
public static void trans(int num ,int base, int offset)
{
if(num == 0) //如果要转换的数值是0,则直接返回
{
System.out.println(0);
return;
}
StringBuilder sb = new StringBuilder();// 定义一个StringBuilder容器,用来存放数据,主要使 //用其reverse方法
char[] chs = new char[]{'0','1','2','3','4','5','6',
'7','8','9','A','B','C','D','E','F'}; //通过查表法更简单的找到相&之后的数据
while(num!=0)
{
int temp = num & base;
sb.append(chs[temp]);
num = num >>> offset;
}
System.out.println(sb.reverse());
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值