码迷,mamicode.com
首页 > 其他好文 > 详细

IT十八掌第三天课程总结

时间:2016-05-09 07:14:43      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:作业

IT十八掌大数据第三天
1. 1函数的含义
   函数就是定义在类中的具有特定功能的一段独立小程序。
   函数也称为方法。 
1.2函数的格式
   修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,...)
   {
    执行语句;
    return 返回值;
   }
    返回值的数据类型是由函数运行后的结果决定的
    形参:是一个变量,用于存储函数调用时传递给函数的实际参数
    实际参数:传递给形式参数的具体数值
    return:用于结束函数
    返回值 : 该函数运算后的结果,该结果会返回给调用者。
 **
    对于函数没有具体返回值的情况,返回值类型使用关键字void表示, 如果该函数中的return语句如果在最后一行可以省略不写。
注意:
    函数中只能调用函数,不可以再函数内部定义函数。
    定义函数时,函数的结果应该返回给调用者,交给调用者处理。

  函数在应用时需要明确
    定义的函数最后的结果是什么
    明确定义该功能的过程中,是否需要未知内容参与运算
  定义一个函数实现两个整数相加
 class FunctionTest {
    public static void main(String [] args){
        System.out.println(Sum(2,3));

 }
  public static int Sum(int a , int b){          
    return a+b;
  }
}

     此函数可以实现对Sum的调用


函数的重载
   在同一个类中,允许存在一个以上的同名函数,只要他们的参数个数或者参数类型不同即可
   特点:
   与返回值无关,只看参数列表
   class FunctionTest {
    public static void main(String [] args){
        System.out.println(Sum(2,3));
		System.out.println(Sum(2,3,4));

 }
  public static int Sum(int a , int b){  //定义两个参数
    return a+b;
  }
  public static int Sum(int a, int b, int c){  //定义三个参数可以
   return a+b+c;
  }
}

数组 Array
----------------
概念 : 同一种类型的数据的集合。(数组就是一个容器)
好处: 可以自动给数组中的  元素  从0开始编号,方便操作这些元素。
格式:
   格式1
  元素类型[] 数组名 = new 元素类型 [元素个数或者数组长度]
  例:
  int [] arr =new int [6] //表示的是 该元素为 int型, 元素的长度为6 (结果为有7个元素,因为从0开始)
  格式2
  元素类型[] 数组名 = new [] { 元素,元素……};
  例:
  int [] arr =new int []{1,2,3};
  int [] arr= {3,5,7,9};
class ArrayDemo {
	public static void main(String[] args) {
		int[] arr=new int [6];
		int[] arr2=new int[]{1,2,3};
		int [] arr3= {3,5,7,9};
		System.out.println(arr.length);  // 打印数组长度  arr.length是默认的属性  
		System.out.println(arr2.length);
		System.out.println(arr3.length); 
	}
}
  数组在内存中的形式
      数组在内存中是连续的
      下表从0开始  //访问数组的某个数字时 可以使用arr(下标) 来实现 如[1,2,3,4]  arr[0] 即表示该数组的第一个数1.
      //数组的长度为 arr[length] 数组中的最大值为arr[length-1] 
      数组中无arr[length]这个数字,如果访问的话会报错  //ArraIndexOutOfBoundException :数组越界异常 
       
int[] arr=new int [6];  共三步操作 1-定义一个int型数组2-在内存中开辟一个空间3-将两者关联起来
  堆:heap 
  ---------------
       object heap
    //数组处在堆区   
    // new建立的实例都处在堆内存中
    //因为所有的对象都处在堆区中,所以如果堆设置的过小会放不下对象出现堆栈溢出(一般是栈溢出)
    heap overflow 堆溢出
    stack overflow 栈溢出

  栈 stack
  ----------------
        方法栈
	方法栈至少对应一个线程(主线程main函数所在的线程)
	栈中每一个方法叫做 一个方法帧 method frame 
	push  stack : 压栈
	pop   stack :弹栈
    java没有指针是指没有显式的指针操作。引用就是指针(变量的名称)
    NullPointerException 是空指针异常(RuntimeException)//arr []=null;  属于运行时异常


 练习;取数组中的最大值,并封装
 class  ArrayMax{                              //类的名称一定要和文件编译后的名称一样,否则运行会报错。
	public static void main(String[] args) {    
		System.out.println(getMax(new int []{2,5,21,5,7}));
		
	}
  public static int getMax (int [] arr){
	 //从健壮性考虑,应该考虑到arr==null和arr.length 长度为0。 
         if (arr == null|| arr.length==0){  //短路与先判断大的再判断小的
			 System.out.println("数组不存在");
				 return -1;   //当为这两种情况时,提示错误,并返回一个-1的结果。
         }
        int temp =Integer.MIN_VALUE;  //Integer.MIN_VALUE是整数型数字的最小值
		for (int i=0; i < arr.length ; i++ ){
			if (temp < arr[i]){
			 temp = arr[i] ;
			 }
			}
		    return temp;
	  }
  
  }


如果求数组中的最小值,之需要将Temp =Integer.MIN_MALUE换成---> Temp =Integer.MAX.MALUE, temp<arr(i)-->temp>arr(i)即可

对数组进行排序  (从小到大) 思想  迭代数组元素--查找最小值和最小值对应的角标--置换位置--返回数组--封装--调用

class  ArraySelectSort{
	public static void main(String[] args) 
	{
		outArr(sort(new int []{2,1,6,4,9})); //调用数组
	}

   public static int[] sort(int[] arr){
      if (arr == null|| arr.length == 0){           //排除为null和长度为0的情况
			 System.out.println("数组不存在");
				
	  }
      //判断该数字往后的数字中的最小值
	
	  for (int i =0;i < arr.length ;i++ ){ //遍历数组中的所有数字
		   int aa=Integer.MAX_VALUE;
	       int index = 0 ;     //定义角标的初始变量为0
          for (int j= i + 1;j < arr.length;j++ ) {//遍历arr[i]数字后面的所有数字,求其中的最小值
			  if ( aa > arr [j]){
				  aa = arr [j]; //将较小的值赋值给Temp 
				  index = j ;  //获取较小值的角标
				//  System.out.println(aa) ;
			  }
		     }
			 //选出后面数字中的较小值时,如果比自身小,则调换位置
			if (arr[i]>aa){    
			arr[index] = arr[i];  // 将arr[i]这个较大值赋值为arr[index],这里arr[index]充当一个中间量,此时arr[]为空
			arr[i] =aa ; //然后将aa 赋值给已经是空值的arr[i]   实现两个数字的互换位置。
			 }
	  }
	    return arr; //返回arr 数组
  }
   public static void outArr (int [] arr){  //封装outArr 方法
     for (int i = 0; i < arr.length ;i++ ){
          System.out.print(arr[i]+" ");  //打印 arr[i]这个数组

     }
   }

}

问题:
************************************************************************
为什么当               int aa=Integer.MAX_VALUE;       处在:
	               int index = 0 ;   
处在:
		         for (int i =0;i < arr.length ;i++ ){ //遍历数组中的所有数字
上面时为什么是打印的结果是错误的。
*************************************************************************

冒泡排序

*****冒泡排序的话,该值会自动的跟下一位进行比较*****
所以 5,4,3,2,1  如果进行冒泡排序的话 只需要取到 arr[3]即可 ,arr[3]会自动的跟arr[4]进行比较。所以不需要取到arr[4]


举例:
使用大数下沉的方式 进行冒泡排序
class  BubbleSort{
	public static void main(String[] args) {
		outArr(bubble(new int[]{ 3,6,8,2,1,5,9}));
	}
	public static int[] bubble (int [] arr) {  //定义函数数组
         //大数下沉的方式
       for (int i = 0;i < arr.length - 1 ;i++ ){  //外层循环次数 为arr.length-1
          for (int j = 0;j < arr.length - 1 - i ;j++ ){      //n内层循环次数为 arr.length-1-i
             int temp= 0;  //定义一个临时变量 用来接收数据
			 //数据的对调(因为是大数下沉的方式)
			 if(arr[j]>arr[j+1]){
            
			 temp = arr[j];
             arr[j]=arr[j+1];
			 arr[j+1]=temp;
			}
        }
	}

          return arr;  //返回数组
  }
    

	 public static void outArr(int [] arr){   //封装方法
	  for (int i=0 ;i<arr.length ;i++ ){

		  System.out.print(arr[i]+" ");
	  }

	 }

}


***************
        for (int j = 0;j < arr.length - 2 - i ;j++ ){      //n内层循环次数为 arr.length-1-i
	为什么-2 和 -1 结果相同

***************
折半查找
如果查找结果为10

 1,3 ,5 ,7,8,10,11  进行折半的话 第一次折半的话为7,第二次进行折半的话为10(第二次从8开始)

 折半查找 数据要有序

 查找1-9数字中 6首次出现的位置。
 class  HalfFind{
	public static void main(String[] args) {
	  System.out.println(find(new int []{1,2,3,4,5,6,7,8,9},6));
	}
 public static int find(int [] arr,int n){  //定义函数  *定义 一个int 型的数字 
     int a = 0 ;int b = arr.length ; int m = 0 ;  //定义三个变量 【a b】角标 m (为中间量的值)
	    int mindex = 0;  //中间量角标
	     //定义循环
	     while (a <= b){   //循环条件
			 mindex  =  (a + b) /2 ; //计算中间量的角标
              m  = arr[mindex];     //计算m的值
              
	 
	             //判断m和 
	           if ( m == n ){  //如果m 和查询值相等   注意是 “==”
		          return mindex;   
	               }
	            //查询范围落在左边
	             else if(m > n){
		            b= mindex - 1;
	  
	               }
	             //查询范围落在右边
	             else {
	               a = mindex + 1;
	               }
               }
			    return - 1 ;     //返回值 
         }
		      

}


数组中的数组
---------------------

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



打印倒置的二维数组

class MultiArray {
	public static void main(String[] args) {

		int [][] arr= new int[4][3];  //定义二维数组arr[4][3]

		int a= 12; //定义一个数字从12开始
		for (int i = 0;i<arr.length ;i++ ){   //定义外层函数 (有几个二维数组)
            for (int j = 0;j<3 ;j++ ){  //定义内层函数(每个数组中有多少个元素)
				arr [i][j] = a;  //对第i行第j个元素赋值
				a--;  //自减1  

            }

		}
		outArr(arr);   //调用
		
	}

	public static void outArr(int [][] arr){ //定义outArr 函数
	     for (int i = 0;i <arr.length ;i++ ){  
             for (int j=0 ;j< 3 ;j++ ){
				 System.out.print(arr[i][j]+"\t"); //打印arr[i][j]的数值
             }
                System.out.println();
	     }
	}
}
/*
1	2	3	     [0][0]  [0][1]  [0][2]  
4	5	6            [1][0]  [1][1]  [1][2]  
7	8	9	     [2][0]  [2][1]  [2][2]  
10	11	12           [3][0]  [3][1]  [3][2]

12	11	10       [3][2]  [3][1]  [3][0]      [i][j]       arr.length-1-i
9	8	7        [2][2]  [2][1]  [2][0]      a--
6	5	4        [1][2]  [1][1]  [1][0]
3	2	1        [0][2]  [0][1]  [0][0]
*/


IT十八掌第三天课程总结

标签:作业

原文地址:http://670597669.blog.51cto.com/10018785/1771307

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!