黑马程序员->基础部分 (2--语句,函数,数组

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

 

六6------语句。程序流程控制,6.1,判断结构,6.2,选择结构,6.3,循环结构。
  6.1.. if语句,三种格式,*/


6.1.1 if(条件表达式)            6.1.2. if (条件表达式)          6.1.3 if (条件表达式)
           {                                            {                                             {
              执行语句;                               执行语句;                            执行语句;
           }                                             }                                            }
         else                                       else if (条件表达式) 
          {                                            {
             执行语句;                              执行语句;
          }                                            }
                                                              .....
          else
         {
               执行语句;
          }
//      6.2...选择结构,switch语句,一种格式
// 2012年5月4日22:23:34
 switch(表达式)
 {
  case 取值1:
   执行语句;    //if和switch语句很像。如判断的具体数值不多,而且符合byte,short,int,char这四种类型。用switch。
  break;           //虽然两个语句都可以使用,建议使用switch语句,因为效率高。
  case 取值2:    
   执行语句;    //其他情况,对区间判断,对结果是boolean类型的判断,用if。if的使用范围更广。
  break;          
  .....           
  default:
   执行语句;
  break;
 }
//      6.3.....循环结构,代表语句:
6.3.1..while          6.3.2...do.while                            6.3.3...for      .....
 
  while语句表达式:      do.while语句格式:(中间没点)                for (初始化表达式; 循环条件表达式 ; 循环后的操作表达式 )
  while(条件表达式)      do.                                        {
  {                      {                                             执行语句;
   执行语句;             执行语句;                               }
  }                      }while(条件表达式);                     
 //                                                                 
//                      do while特点是条件无论是否满足,
//                      循环体至少被执行一次。

/*
1,变量有自己的作用域,对于for来讲,如果将用于控制循环的增量定义在for语句中,那么该变量只在for语句有效。
    for语句执行完毕,该变量在内存中被释放。
2,for 和 while 可以进行互换,如果需要定义循环增量,用for更为合适。
  总结: 当要对某些语句执行很多次是,就要用循环结构。
  
                            无限循环的最简单表现形式:*/
                                        for (; ; ){}                    while(true){}

 

循环一定要明确哪些语句需要参与循环,哪些不需要。
//累加思想:通过变量记录住每次变化的结果,通过循环的形式,进行累加动作。
计数器思想:通过一个变量记录住数据的状态变化,也通过循环完成。
//循环嵌套。语句嵌套形式,就是语句中还有语句。         (大圈套小圈。。)
对于打印长方形:外循环控制行数,内循环控制的是每一行的列数,也就是一行中元素的个数。

6.4.....其他流程控制语句
 6.4.1..break    语句:应用范围:选择结构和循环结构。
 6.4.2..continue 语句:应用于循环结构。
//  这两个语句离开应用范围,存在是没有意义的。这两个语句单独存在下面都不可以有语句,因为执行不到。
//  continue 语句是结束本次循环继续下次循环。标号(给循环起的名字)的出现,可以让这两个语句作用于指定的范围。

 

//  七7,函数________________________________________________________________________
2012年5月9日1:07:32

7.1......函数就是定义在类中的具有特定功能的一段独立小程序。  函数也称为方法。

   函数的格式: //  修饰符 返回值类型 函数名(参数类型 形式参数1, 参数类型 形式参数2,....)
                    {
      执行语句;   如: public static void getResult(int num)
      return 返回值;           {
     }         return num * 3 + 4;
   返回值类型:函数运行后的结果的数据类型。      }
     参数类型:是形式参数的数据类型。
     形式参数;是一个变量,用于存储调用函数时传递给函数的实际参数。
  实际参数:传递给形式参数的具体数值。
   return :用于结束函数;
    返回值:该值回返回给调用者。// 当函数运算后,没有具体的返回值时,这时返回值类型用一个特殊的关键字来标示。
                                   // 就是 void :代表的是函数没有具体返回值的情况。
           // 当函数的返回值类型是 void 时,函数中的return 语句可以省略。
   //------------------------------------------------------------------------------------------
7.2....函数特点:
   定义函数可以将功能代码进行封装;
   便于对该功能进行复用;
   函数只有被调用才会被执行;
   函数的出现提高了代码的复用性;
   对于函数没有返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。
 // 注意:函数中只能调用函数,不可以在函数内部定义函数。
 //       定义函数时,函数的结果应该返回给调用者,交由调用者处理。

7.3.....函数的应用。。如何定义一个函数?
                   1.)既然函数是一个独立的功能,那么该功能的运算结果是什么先明确。
       2.)在明确咋定义该功能的过程中是否需要未知的内容参与运算。
  两个明确:
    ..明确要定义的功能最后的结果是什么?
    ..明确在定义该功能的过程中,是否需要未知内容参与

7.4......函数的重载(overload)
               重载的概念:在同一个类中,允许存在一个以上的同名函数,只要他们的参数个数或者参数类型不同即可。
      重载的特点:与返回值无关,只看参数列表。
      重载的好处;方便与阅读,优化了参数设计。
2012年5月11日0:37:42

  public static void main(String[] args)
  {
   add(4,5);
   add(4,5,6);   
  }
  public static int add(int x,int y) //与下面定义的函数名一样,但是参数个数不一样,是重载,所以不冲突。 
  {
   return x+y;        // 什么时候定义重载呢?
  }           // 当定义的功能相同,但参与运算的未知数不同。
  public static int add(int x,int y,int z); // 那么,这时就定义一个函数名称以表示其功能,方便阅读,而通过参数列表的不同
  {           //来区分多个同名函数。
   return x+y+z;
  }
// 八8.数组———————————————————————————————————————————————————————————————————————————————————————————数组

8.1..........数组的概念:同一种类型数据的集合,其实数组就是一个容器。
          // 数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。
    格式1 : 元素类型[] 数组名 = new 元素类型[ 元素个数或数组长度];
                     int[] arr = new int[5]; //默认初始化值为0

    格式2:  元素类型[] 数组名 = new 元素类型[]{元素,元素,.....}; //静态初始化形式
                     int[] arr = new int []{3,5,1,7};
         int[] arr = {3,5,1,7}; // 可以理解成简化形式
8.2..........// 内存结构
         java在运行时,需要在内存中的分配空间。为了提高运算效率,又对空间进行了不同区域的划分,因为每一片区域都有特定的
      处理数据方式和内存管理方式。
          // 栈内存
      用于存储局部变量,当数据使用完,所占空间会自动释放。
   //  堆内存
      数组和对象,通过 new 建立的实例都存放在堆内存中。   每一个实体都有内存地址值。
   实体中的变量都有默认初始化值。                      实体不再被使用,会在不确定的时间内被垃圾回收器回收。
                                                              //(方法区、本地方法区、寄存器)
2012年5月14日 02:52:41————————————————————————————————————————————————
 //例:
  class  ArrayDemo
 {
  public static void main(String[] args) //这个代码会出项两个错误;
  {  
   int[] arr = new int[3];
   arr = null;//因为这项,而会出现错误2,这个语句会使下面的打印找不到实体。
   System.out.println(arr[3]);//因为让打印的值超过数组定义的范围,这个会出现错误1.
  }
 }
  错误提示1:java.lang.ArrayIndexOutOfBoundsException: 3  操作数组时,访问到了数组中不存在的角标。
    2:java.lang.NullPointerException   空指针异常,当引用没有任何指向值为null的情况,该引用还在用于操作实体。
8.2.1.............//数组的遍历
  数组中有一个属性可以直接获取到数组元素个数。 length.
  使用方法:数组名称.length =
  遍历用 for 循环。
  int[] arr = new int[]{3,6,7,8,6565,54,7,783}; 
  for (int x=0; x<arr.length; x++)
  {
   System.out.println("arr["+x+"]="+arr[x]+";");
  }
8.2.2................//获取数组中的最值
  int[] arr ={3,5,7,12,45,8,9,1,};
  int max = arr[0];            //这里可以是int max = 0; 因为0不是作为数组元素,而是以初始化为数组中任一角标存在。
  for (int x=1; x<arr.length; x++)
  {
   if (arr[x]>max)
    max = arr[x];
  }
  System.out.println("max="+max);
选择排序 ...................................
  int[] arr ={3,1,5,7,8,9,4,11};
  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;
    }
   }      
  }
  for (int x=0; x<arr.length; x++)
  {
   System.out.print(arr[x]+"; ");
  }
冒泡排序 .......................................//相邻的两个元素进行比较,如果符合条件换位。
  int[] arr = {3,5,6,1,2,8,13,7};
  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;
    }
   }
  }
  for (int x=0; x<arr.length; x++)
  {
   if(x!=arr.lengh-1)
   {
    System.out.print(arr[]+";");
    else
    System.out.print(arr[]);    
   }
  }
2012年5月18日22:45:21/
数组的查找..................................................
//折半查找。 提高效率,但是必须要保证该数组是有序的。
    public static int halfsearch(int[] arr,int key)
 {
  int min,max,mid;
  min = 0;
  max = arr.length-1;
  mid = (min+max)/2;
  while (arr[mid]!=key)
  {
   if (arr[mid]<key)
    min = mid + 1;
   else if(key<arr[mid])
    max = mid - 1;
   mid = (min+max)/2;
   
  }
  return mid;
 }
 //折半查找(二分查找)第二种方法,先让两头的值不二分过头,在开始循环二分。
 public static int halfsearch2(int[] arr,int key)
 {
  int min = 0,max = arr.length-1,mid;
  while (min<=max)
  {
   mid = (min+max)>>1;
   if(key>arr[mid])
    min = mid + 1;
   else if(key<arr[mid])
    max = mid - 1;
   else
    return mid;
  }
  return -1;
 }
 public static void main(String[] args)
 {
  int[] arr ={2,4,6,8,11,13,24};
  int fuck = halfsearch2(arr,131);
  System.out.println("fuck="+fuck);
 }
数组的进制转换应用...............................................
// 查表法:将所有的元素临时存储起来,建立对应关系,每一次&15后的值作为索引区查建立好的表,就可以找对应的元素。
 public static void main(String[] args)
 {
  char[] chs ={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; //如果求二进制此处为 char[] chs ={'0','1'}; 
  //定义一个临时容器。
  char[] arr = new char[8];     //如果求二进制此处为 char[] arr = new char [32];  
  int i = -121;                
  int j = arr.length;
  while (i!=0)       //如果求八进制为 char[] chs ={'0','1','2','3','4','5','6','7'};
  {          //               char[] arr = new char [8];
   int k = i & 15; 
   arr[--j] = chs[k];
   i = i >>> 4;
  }
  System.out.println("j="+j);
  for (int x=j; x<arr.length; x++)
  {
   System.out.print(arr[x]);
  }
 }
8.2.3.......................................//二位数组

     格式1:int [][] arr = new int[3][2];                格式2:int[][] arr = new int [3][];
  // 定义了名称为arr的二维数组。         二维数组中有3个一维数组。
     二维数组中有3个一维数组。          每个一维数组都是默认初始化值null
  // 每一个一维数组中有2个元素。         可以对着三个一维数组分别进行初始化
     一维数组的名称分别为arr[0],arr[1],arr[2]      arr[0] = new int[3];
  //给第一个一维数组1角标为赋值为78的写法为:arr[0][1] = 78   arr[1] = new int[1];
                     arr[2] = new int[2];

 

 

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值