黑马程序员_JAVA基础之末尾

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_wangtao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值