zoukankan      html  css  js  c++  java
  • day03,day04_数组,循环(上)

    break和continue的使用范围:

    continue只能用于循环结构,也就是说只要有continue,肯定存在循环.

    break用在switch语句和循环结构中.

    break和continue单独存在时,下面不可以有任何语句,因为执行不到(会报错)

    函数重载(overload)

    同一个类中允许存在一个以上的同名函数,只要它们的 参数类型/参数个数/参数类型顺序 不同,跟 返回类型 无关.

    Java中的数组:

    首先了解下:

    在函数中定义的一些 基本类型的变量(short,int,char,long,double,byte,boolean,float),和 对象的引用变量(int[ ] x等) 都是在函数的栈内存中分配,

       当在一段代码块(也就是一堆花括号{ }之间)定义一个变量时,Java就在中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量

       所分配的内存空间,该内存空间可以立即被另作他用.

              堆内存用来存放由 new创建的对象和数组  ,在堆中分配内存,由JVM的自动垃圾回收器来管理.在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊

                  的变量,让栈中的这个变量的取值 等于 数组 或 对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量,以后就可以在程序中使用栈中的引用

                  变量来访问堆中的数组或对象,引用变量相当于是为数组或对象起的一个名称(叫代号也行).

              引用变量是普通的变量,定义时在中分配,引用变量在程序运行到其作用域之外后被释放.

              而数组和对象本身在 堆 中 分配,即使程序运行到使用new产生数组和对象的语句所在的代码块之外,数组和对象本身占据的内存不会被释放,数组和对象在没有引用

                  变量指向它时,才会变为垃圾,不能再被使用,但仍然占据内存空间不放,在随后一个不确定的时间被 垃圾回收器 收走(释放掉).这也是Java比较占内存的原因.

            以上摘自张孝祥老师的<Java就业培训教程>

        

           举例:

               int[ ]  x;//定义了一个数组x,这条语句的执行完后的内存状态如下

               x=new int [3];//数组初始化,内存状态如下

             堆内存_栈内存1

           堆内存_栈内存2

    然后测试一下各种类型数组的默认值:

    class ArrayTest
    {
    	public static void main(String[] args) 
    	{
    		//int,double,float,char型数组默认值
    		 int[] n=new int[3];
    		  System.out.println("int "+n[1]);//0
    		 char[] c=new char[3];
    		   System.out.println("char "+c[1]);//ASCII码为0的空字符:'\0'
    		 float[] f=new float[3];
    		   System.out.println("float "+f[1]);//0.0f(加f为了说明是float型)
    		 double[] d=new double[3];
    		   System.out.println("double "+d[1]);//0.0
    		 boolean[] b=new boolean[3];
    		   System.out.println("boolean "+b[1]);//false
    	}
    }
    
       
    运行结果:
       数组默认值
    两个经典的排序冒泡和选择:
      示例:
    import java.util.*;
    class sort 
    {
    	/*
    	 冒泡排序:(从小到大,从零趟开始为了操作方便)
    	 算法思想:
    	  相邻两个数比较,两两比较得到的较大数不断后移,
    	  最终每趟最大沉底.
    	  示例:下标 0 1 2 3 4 
    	       i   5 3 7 9 1 
    	             
    	            3 5 7 9 1 5>3交换 
    	  第零趟:   3 5 7 9 1 5<7不动
                        3 5 7 9 1 7<9不动
    	            3 5 7 1 9 9>1交换-->9为最大,arr[4]为9
    	     共比较4(arr.length-0(趟数)-1)次
    	  第一趟:   3 5 7 1   -->9不用在参与比较
    	             3 5 7 1   3<5不动
    		     3 5 7 1   5<7不动
    		     3 5 1 7   7>1交换-->7为次大,arr[3]为7
    	     共比较3(arr.length-1-1)次
    	  第二趟:   3 5 1     -->7不用再参与比较
    	             3 5 1     3<5不动
    	             3 1 5     5>1交换-->arr[2]为5
    	     共比较2(arr.length-2-1)次
    	  第三趟:    3 1       -->5不用再参与比较
    	             1 3       3>1交换-->arr[1]为3
    				 共比较1(arr.length-3-1)次
    	  共走了4(arr.length-1)趟
    	  最后一定剩余一个数字1,不用再参与比较,肯定最小      
    	*/
       //交换
       public static void swap(int[] b,int i,int j)
    	{
             int temp=b[i];
             b[i]=b[j];
             b[j]=temp;
          }
       //冒泡排序
       public static void bubbleSort(int[] a)
       {
         for(int i=0;i<a.length-1;++i)//控制趟数
          for(int j=0;j<a.length-i-1;++j)//控制每趟比较的次数
    	    if(a[j]>a[j+1])
    	      swap(a,j,j+1);
       }
     /*
      选择排序:(从小到大)
      算法思想:
        每一趟从待排序的数据元素中选出最小(或最大)的一个元素,
        顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
       示例:下标 0 1 2 3 4 
    	     5 3 7 9 1 
           i      
                3 5 7 9 1  5>3交换
       第零趟:   3 5 7 9 1  3<7不动      
                  3 5 7 9 1  3<9不动
                  1 5 7 9 3  3>1交换-->此时arr[0]为1,并且最小
            共比较4(arr.length-0-1)次
      
                    5 7 9 3  5<7不动
       第一趟:     5 7 9 3  5<9不动 
                    3 7 9 5  3<5交换-->此时arr[1]为3,次小
            共比较3(arr.length-1-1)次
      
       第二趟:       7 9 5  7<9不动
                      5 9 7  5<7交换-->此时arr[2]为5.
           共比较2(arr.length-2-1)次
       
       第三趟:         7 9  9>7交换-->此时arr[3]为7.
          共比较1(arr.length-3-1)次
    	 
        共走了4(arr.length-1)趟,最后剩余一个9,为最大,arr[4]为9                 
       */
       //选择排序
        public static void selectSort(int[] b)
    	{
    	  for(int i=0;i<b.length-1;++i)//控制趟数
    	     for(int j=i+1;j<b.length;++j)//共比较(arr.length-1)-(i+1)+1
    	        if(b[i]>b[j])                //即arr.length-i-1
    	          swap(b,i,j);
    	}
       //选择排序第二种写法:
        public static void selectSort_2(int[] c)
        {
    	   int k=0;
    	   for(int i=0;i<c.length-1;++i)
    		{
    	        k=i;
    	        for(int j=i+1;j<c.length;++j)
    	         if(c[k]>c[j])
    	        k=j; 
    	       if(k!=i)
    	       swap(c,k,i);
    	      }
        }
    	/*
    	这种写法和上面最大区别是:
    	  k中每次存放较小元素的下标,直到一趟走完
    	  此时k中存放这一趟最小元素下标
    	  这时在和第i个位置的元素交换
    	 */
      
       //打印数组
        public static void showArray(int[] arr)
    	{
    	 System.out.print("[");
    	 for(int i=0;i<arr.length;++i)
    	    if(i!=arr.length-1)
    		  System.out.print(arr[i]+",");
             else
    		System.out.println(arr[i]+"]");
        }
    	//Test
        public static void main(String[] args)
    	{
    		int[] arr={7,3,9,11,1,6,5};
    		int[] arr_2={6,2,3,1,11};
    		int[] arr_3={9,8,10,2,11,3};
    		bubbleSort(arr);
    		System.out.println("bubbleSort: ");
    		showArray(arr);
    	    
    		selectSort(arr_2);
    		System.out.println("slectSort: ");
    	       showArray(arr_2);
    	   
    	    selectSort(arr_3);
    		System.out.println("selectSort_2: ");
    	    showArray(arr_3);
    		
    		//Arrays.sort(arr_2);实际开发中使用
    		//showArray(arr_2);
    	}
      
    }  
    运行结果:
          排序结果

    最大值与最小值:

    class  MaxMin
    {
     //相当于冒泡/选择排序的一趟
     //可以一次遍历同时找出最大值和最小值
       public static void main(String[] args)
       {
         int max,min;
         int[] arr={3,2,1,6,9,5};
    	 max=min=arr[0];//max和min的初始值可以为数组中任何两个值,但下面的循环必须从下标0(i=0)开始
         for(int i=1;i<arr.length;++i)
           if(arr[i]>max)
    	       max=arr[i];
           else
                if(arr[i]<min)
    	      min=arr[i];
    	 System.out.println("max="+max+",min="+min);
       }
    }
    运行结果:

    MaxMin

     
       
     

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

  • 相关阅读:
    搭建AngualarJS开发环境
    博客从博客园迁移到github上
    探讨Android中的内置浏览器和Chrome
    Netbeans配置Xdebug
    关于 Xcode 调试工具 GDB and LLDB
    关于ios 运行时 介绍的比较详细的帖子
    你不知道的KVO的内部实现
    sqlite 判断表中是否包含 某个字段
    发一些靠谱的招聘网站(含ios)
    解析 友盟崩溃信息
  • 原文地址:https://www.cnblogs.com/yiqiu2324/p/2861747.html
Copyright © 2011-2022 走看看