黑马程序员---java基础----------------- 函数和数组

1,函数

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

  格式:修饰符   返回值类型    函数名   (参数类型   形式参数1,参数类型   形式参数2,……)

     {

        执行语句;

        return 返回值;

     }

  一般,我们为了提高代码的复用性,我们可以将代码进行抽取,封装成独立的函数,用大的时候直接调用即可。对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。主要注意的是:函数中只能调用函数,不可以在函数中再定义函数,定义函数时,函数的结果应该返回给调用者,交由调用者处理。

看代码:

class FunctionDemo {  

     public static void main(String[] args)  {  

        getResult(5);

     }

     public static void getResult(int num)  {  //这个就是封装之后的函数,这样就提高了函数的复用性和扩展性。它的功能是计算一个数乘以3加5的结果,void为不

       System.out.println(num * 3 + 5);   //返回结果

       return;//可以省略  }  

    }

}


如何定义一个函数呢?
     1,既然函数是一个独立的功能,那么该功能的运算结果是什么先明确,因为这是在明确函数的返回值类型。
     2,在明确在定义该功能的过程中是否需要未知的内容参与运算。因为是在明确函数的参数列表(参数的类型和参数的个数)。

再来看一段代码:

class  FunctionTest {

   public static void main(String[] args)  {  

     draw(5,6);   

    printHr();   

    draw(7,9);

    printHr();

     print99();   

   }

  //定义一个打印99乘法表功能的函数。

  public static void print99()
   {
      for(int x=1; x<=9; x++)
      {
         for(int y=1; y<=x; y++)
         {
            System.out.print(y+"*"+x+"="+y*x+"\t");
         }
         System.out.println();
      }
   }

  public static void draw(int row,int col)//打印矩形的方法
   {  
      for(int x=0; x<row; x++)
      {
         for(int y=0; y<col; y++)
         {
            System.out.print("*");
         }
         System.out.println();
      }
   }

  public static void printHr()//打印水平线
   {
      System.out.println("------------------------------");
   }

}

  函数的重载:函数名相同,参数列表有变只和这两个有关系啊。看下面的例子

class FunctionOverload {  

  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 add(x,y)+z;  

  }

}

什么时候用重载?
  当定义的功能相同,但参与运算的未知内容不同。
  那么,这时就定义一个函数名称以表示起功能,方便阅读,而通过参数列表的不同来区分多个同名函数

2,数组

  数组就是同一种类型数据的集合,数组是一个容器,它可以给数组中的元素自动从0开始编号,方便操作。

  申明:

    元素类型[]    数组名=new  元素类型[元素个数或数组长度];    int  []  arr=new int[5];

    元素类型[]    数组名=new  元素类型[]{元素1,元素2,……};    int  []  arr=new int[]{1,2,3,4,5};

  数组的初始化:

    静态初始化:创建数组时,程序员显式地为数组中的元素赋初值,你不指定数组长度    int[] arr = {1,2,3,4,5} ;             int[] arr1 = new int[]{1,2,3,4,5};

    动态初始化:创建数组时,由系统默认地为数组中的元素赋初值,你指定数组长度      int[] a;     a = new int[3];

  数组元素的默认值:int型的是0,float是0.0,string是null

  数组的异常:

    数组越界异常:操作数组时,访问到了数组中不存在的角标,                    ArrayIndexOutOfBoundsException

    空指针异常:当引用没有任何指向值为null的情况,该引用还在用于操作实体,                    NullPointerException

  获取数组的长度:

    数组名.length                      System.out.println("length:"+arr.length);

    要获取数组的长度,通常要用到遍历。有一个题是这样的,要求将数组的元素用逗号隔开

      

        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 selectSort(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])
                {
                   swap(arr,x,y);
                }
             }
          }
       }

 

      public static void bubbleSort(int[] arr)
       {
          for(int x=0; x<arr.length-1; x++)
          {         
             for(int y=0; y<arr.length-x-1; y++)//-x:让每一次比较的元素减少,-1:避免角标越界。
             {
                if(arr[y]<arr[y+1])
                {
                   swap(arr,y,y+1);
                }
             }
          }
       }

 

      public static void swap(int[] arr,int a,int b)
       {
          int temp = arr[a];
          arr[a] = arr[b];
          arr[b] = temp;
       }

 

      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 reverseArray(int[] arr)
       {
          for(int start=0,end=arr.length-1; start<end ; start++,end--)
          {
             swap(arr,start,end);
          }
       }

      public static void swap(int[] arr,int a,int b)
       {
          int temp = arr[a];
          arr[a] = arr[b];
          arr[b] = temp;
       }

 


定义功能,获取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;
            }
            return -1;
       }

 

       public static int getIndex_2(int[] arr,int key)  {  

           int min = 0,max = arr.length-1,mid;

           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 min;  

        }

 

 


折半查找

      public static int halfSearch(int[] arr,int key)  {   

          int min,max,mid;   min = 0;   

          max = arr.length-1;   

          mid = (max+min)/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;

       }

 

      public static int halfSearch_2(int[] arr,int key)  {  

           int min = 0,max = arr.length-1,mid;

            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;  

        }

 

  

posted @ 2013-05-22 19:42  zhao198627  阅读(164)  评论(0编辑  收藏  举报