------- android培训、java培训、java博客、java学习型技术博客、期待与您交流! ----------
2.4 switch选择语句的特点:
switch(表达式){
case 取值1:
执行语句..
break;
case 取值2:
执行语句..
break;
default:
执行语句..
break;
}
switch(exp):exp只能有四种类型,分别是:byte、short、int、char
Jdk7.0对switch语句进行的增强,不仅可以判断以上四种类型,还可以判断字符串;
而jdk5.0,对switch语句进行的稍微增强,可以对枚举类型进行判断。
注意:if和 switch语句很像,具体场景下该用哪个呢?
如果判断具体数值不多,而是符合以上四种类型。虽然两个语句都可以使用,建议使用switch语句,因为效率稍高。
其他情况,对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。
面试题:
1、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
答:switch(expr1)中,expr1是一个整数表达式。因此传递给switch和case语句的参数应该是int、short、char或者byte。long,string都不能作用于swtich。
Day_03
3.1循环语句 while 、do while 、for
1、循环语句的其它特点:
public static void fordemo(){
int x=1;
for(System.out.println("a");x<3;System.out.println("b")){
System.out.println("c");
x++;
}
}
// 结果:a c b c b
2、如果变量多的话:for(int x=0,y=1;x<3;x++,y++){}
面试题:
无限循环的最简单表现形式?
for(;;){} 或 while(true){}
1、循环嵌套
1>
for(int i=0;i<4;i++){
for(int j=0;j<3;j++){
System.out.print("*");
}
System.out.println();
}
***
***
***
***
//结论:对于打印长方形:外循环控制行数,内循环控制的是每一行的列数。
2>
int z=5;//记录变量
for(int i=0;i<5;i++){
for(int j=0;j<z;j++){
System.out.print("*");
}
System.out.println();
z--;
}
int z=0;//记录变量
for(int i=0;i<5;i++){
for(int j=z;j<5;j++){
System.out.print("*");
}
System.out.println();
Z++;
}
优化: for(int i=0;i<5;i++){
for(int j=i;j<5;j++){
System.out.print("*");
}
System.out.println();
}
*****
****
***
**
*
for(int i=0;i<5;i++){
for(int j=0;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
*
**
***
****
*****
不是规律的规律:
尖朝上,可以改变条件,让条件随着外循环变化。
尖朝下,可以初始化值,让初始化随着外循环变化。
//99乘法表
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(i+"*"+j+"="+i*j+"\t");
}
System.out.println();
}
----*
---* *
--* * *
-* * * *
* * * * *
for(int i=1;i<=5;i++){
for(int j=i;j<5;j++){
System.out.print("-");
}
for(int j=1;j<=i;j++){
System.out.print("* ");
}
System.out.println();
}
3.2函数的定义
什么是函数?就是定义在类中的具有特定功能的一段独立小程序。
函数也称为方法。
函数的格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,..)
{
执行语句;
return 返回值;
}
形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数。
实际参数:传递给形式参数的具体数值。
返回值:该值会返回给调用者。
函数的特点:
实现功能代码封装、提高代码的复用性、只有被调用才会执行
对于函数没有具体返回值的情况,用关键字void表示,return语句如果在最后可以省略不写。
注意:函数中只能调用函数,不可以在函数内定义函数。
定义函数时,函数的结果应该返回给调用者,交由调用者处理。
Day_04
4.1数组的基本操作
1、获取数组中的最大值。
思路:1>获取最大值需要进行比较,每一次比较都会有一个较大的值。因为该值不确定,通过一个变量进行零时存储。
2> 让数组中每一个元素,都和这个变量中的值进行比较。如果大于了变量中的值,就用该变量记录较大值。
3>当所有的元素都比较完成,那么该变量中存储的就是数组中的最大值。
步骤:1、定义变量,初始化为数组中任意一个元素即可。
2、通过循环语句对数组进行遍历。
3、在变量过程中定义判断条件,如果遍历到的元素比变量中的元素大,就赋值给该变量;
需要定义一个功能来完成。以便提高复用性。
1、明确结果,数组中最大元素int
2、未知内容:一个数组int[]
实现:
public static void maxDemo(int arr[]){
int max=arr[0];
for(int x=1;x<arr.length;x++){
if(arr[x]>max){
max=arr[x];
}
}
System.out.println("max="+max);
}
获取最大值的另一种方式:
可不可以将零时变量初始化为0呢?可以,这种方式其实就是在初始化数组中的任意一个角标。
实现:
public static int max_02(int[] arr){
int max=0;//角标
for(int i=0;i<arr.length;i++){
if(arr[i]>arr[max]){
max=i;
}
}
return arr[max];
}
2、对数数组进行排序操作
1》选择排序,小----->大:
public static void selectP(int arr[]){
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[y];
arr[y]=arr[x];
arr[x]=temp;
}
}
}
}
2》冒泡排序:相邻两个元素进行比较,第一圈,最值出现了最后位。
public static void bubbleSort(int arr[]){
for(int x=0;x<arr.length;x++){
for(int y=0;y<arr.length-x-1;y++){//-x让每一次比较的次数减少,-1防止角标越界
if(arr[y]>arr[y+1]){
int temp=arr[y];
arr[y]=arr[y+1];
arr[y+1]=temp;
}
}
}
}
!!Java提供了排序的方法: Arrays.sort(arr);
3、数组的查找操作
//定义功能,获取key第一次出现在数组中的位置。如果返回-1,证明key在数组中不存在。
public static int getIndex(int[] arr,int key){
for(int x=0;x<arr.length;x++){
if(arr[x]==key)
return x;//返回要查找数key的下标
}
return -1;
}
//折半查找1,提高效率,但是必须要保证该数组是有序的数组。
public static int halfSearch(int[] arr,int key){
int min,max,mid;
min=0;
max=arr.length-1;
mid=(max+min)/2; //除以2代表从中间找,效率高
while(arr[mid]!=key){
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
if(min>max)
return -1;
mid=(max+min)/2;
}
return mid;
}
折半查找方法2:
public static int halfSearch2(int[] arr,int key){
int min,max,mid;
min=0;
max=arr.length-1;
while(min<=max){
mid=(max+min)>>1;//(max+min)/2
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
else
return mid;
}
return -1; //此处如果返回的是min,则是传入的key值插入数组的位置(数任然组保持有序)
}
4、数组的进制转换
//数组,十进制---》二进制
public static void toBin(int num){
StringBuffer sb=new StringBuffer();
while(num>0){
//System.out.println(num%2);
sb.append(num%2);
num=num/2;
}
System.out.println(sb.reverse());//StringBuffer翻转方法将011-->110
}
//十进制------>十六进制,60举例:3C
//ASCALL码:65 A 、 66 B 、 67 C 、68 D ...
// 97 a 、98 b、 99 c ...
//步骤:1、先将这个数&15;2、在无符号右移4位
public static void toHex(int num){
for(int x=0;x<8;x++){//32位里有8个四组
int temp=num&15;
if(temp>9)//有可能大于9,如果大于9则会是字母A、B、C...
System.out.println((char)(temp-10+'A'));//12-10+'A'=67=C;10-》A
else
System.out.println(temp);
num=num>>>4;
}
}
//查表法:十进制------>十六进制,60举例:3C
0 1 2 3 4 5 6 7 8 9 A B C D E F ===十六进制中的元素。
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ==下标
查表法:将所有元素零时存储起来。建立对应关系。
第一次&15后的值作为索引去查建立好的表,就可以找到对应元素。
这样比-10+‘A’简单的多。
算出的结果却是反着的,则可以通过StringBuffer的reverse()方法来翻转;
//得到十六进制的步骤:
1、将十进制数num先&上15,得到一个值C,
2、再将num>>>4得到一个值&15得到一个值3,
===》3C(60);循环..
public static void sortHex(int num){
char[] cha={'0','1','2','3','4','5','6','7',
'8','9','A','B','C','D','E'};
StringBuffer sb=new StringBuffer();
for(int i=0;i<8;i++){
int temp=num&15;
//System.out.println(cha[temp]);
sb.append(cha[temp]);
num=num>>>4;
}
System.out.println(sb.reverse());
}
/*通过数组容器进行翻转*/
public static void sortHex2(int num){
char[] cha={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E'};
//定义一个临时容器
char[] arr=new char[8];
int pos=arr.length;//指针
while(num!=0){
int temp=num&15;
arr[--pos]=cha[temp];
num=num>>>4;
}
//存储数据的arr数组遍历
for(int x=pos;x<arr.length;x++){
if(x!=arr.length-1)
System.out.print(arr[x]+",");
else
System.out.print(arr[x]);
}
}
//查表法 十进制----》二进制
public static void toBin(int num){
//建表
char[] ca={'0','1'};
//定义临时容器
char[] cha=new char[32];
int sop=cha.length;//定义一个指针
while(num!=0){
int temp=num&1;//int temp=num%2;
//System.out.print(ca[temp]+",");
cha[--sop]=ca[temp];
num=num>>>1;//num=num/2
}
//遍历数组cha
for(int x=sop;x<cha.length;x++){//有效循环3次
System.out.print(cha[x]);
}
}
以上进制转换的共性提取全代码:
public class ConmentArr {
public static void main(String[] args) {
//调用...
}
/*十进制----》二进制*/
public static void toBin(int num){
trans(num,1,1);
}
/*十进制----》八进制*/
public static void toBa(int num){
trans(num,7,3);
}
/*十进制----》十六进制*/
public static void toHex(int num){
trans(num,15,4);
}
//提取共性
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'};
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.println(arr[x]);
}
}
}
4.2二维数组[][]
格式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[0]={3,8,2};
第二个个一维数组arr[1]={2,7};
第三个一维数组arr[2]={9,0,1,6};
第三个一维数组的长度表示方式:arr[2].length;
注意: 特殊写法情况:int[] x,y[]; x是一维数组,y是二维数组。
练习:获取arr数组中所有元素的和。使用for的嵌套循环即可。
int[][] arr={{3,5,7},{9,6,7,8},{1,2,3,4}};
int sum=0;
for(int x=0;x<arr.length;x++){
for(int y=0;y<arr[x].length;y++){
sum=sum+arr[x][y];
}
}
System.out.println(sum);
------- android培训、java培训、java博客、java学习型技术博客、期待与您交流! ----------
如有疑问:http://edu.csdn.net/