zoukankan      html  css  js  c++  java
  • Java语言基础(三)函数、数组

    常用的转义字符

            \n 回车
            \t 制表符
            \b 退格
            \r 按下回车键
            windows系统中回车符其实是由两个符号组成的\r\n
            linux中回车符是\n

    函数
        什么是函数
            函数就是定义在类中的具有特定功能的一段独立小程序
            函数也称为方法
        定义函数的格式
            修饰符 返回值类型 函数名(参数类型 形参2,参数类型 形参2,...)    //函数名有多个单词时,第一个单词小写,后面的单词首字母大写
            {
                执行语句;
                return 返回值;
            }
        特殊情况:
            功能没有具体的返回值。    这时,retrun的后面直接用分号结束,因为没有具体值,所以不可以写具体的数据类型,
            在java中只能用一个关键字void来表示这种情况。
            注意:如果返回值类型为void,那么函数中的return语句可以省略不写。
        特点:
            1.定义函数可以将功能代码进行封装
            2.便于对该功能进行服用
            3.函数只有被调用才会被执行
            4.函数的出现提高了代码的复用性
        注意:
            函数中只能调用函数,不能在函数内部定义函数。
            定义函数时,函数的结果应该返回给调用者,交由调用者处理。
     

    class FunctionDemo3
     {
         public static void main(String[] args)
         {
             System.out.println(add(4,5));
             draw(7,9);
             System.out.println(equals(5,6));
             System.out.println(getMax(4,5));
         }
    
         /*
         需求1:定义一个功能,完成两个整数的和的获取
         思路:既然定义功能,就是可以用函数来体现
                     如何定义一个函数?
                     通过两个明确来完成
         明确1:这个功能的结果是什么? 是两个整数的和,是功能的结果,所以该功能的返回值类型是int
                     明确返回值的类型。
         明确2:这个功能实现过程中是否需要未知内容参与运算? 需要加数和被加数。
                     这就是函数的参数列表(参数的个数,参数的类型)
                     明确参数列表
         注意:返回值类型和参数类型没有直接关系
         */
         public static int add(int a,int b)
         {
             return a+b;
         }
    
         /*
         需求2 定义一个功能,在控制台画一个矩形
         明确1:这个功能的结果是什么?没有结果,直接打印到控制台
         明确2:这个功能实现过程中是否需要未知内容参与运算? 行和列不确定,需要两个整数int
         */
         public static void draw(int row,int col)
         {
             for (int x=1;x<=row ;x++ )
             {
                 for (int y=1;y<=col ;y++ )
                 {
                     System.out.print("*");
                 }
                 System.out.println();
             }
         }
    
         /*
         需求3 定义一个功能,比较两个数是否相等
         明确1:这个功能的结果是什么?有结果,true或false,返回值为boolean
         明确2:这个功能实现过程中是否需要未知内容参与运算? 两个数不确定,需要两个整数int
         */
         public static boolean equals(int a,int b)
         {
             /*
             if(a==b)
                 return true;
             else
                 return false;
             */
             return a==b;//a==b,本身是在进行比较运算,结果是true或false,不要要是用(a==b)?true:false
         }
         /*
         需求4 定义一个功能,获取两个整数中较大的那个数
         明确1:这个功能的结果是什么?有结果,返回较大的整数
         明确2:这个功能实现过程中是否需要未知内容参与运算? 参与比较的数不确定,需要两个整数int
         */
         public static int getMax(int a,int b)
         {
             return (a>b)?a:b;
         }
     }

        函数的重载(overload)
            重载的概念
                在同一个类中,允许存在一个以上的同名名称,只要他们的参数个数或者参数类型不同即可。
            重要特点
                与返回值类型无关,只看参数列表
      

    class FunctionDemo4
      {
          public static void main(String[] args)
          {
              System.out.println(add(1.2,2.5));
              printCFB(5);
              printCFB();
          }
          /*
          函数的重载
          1.同一个类
          2.同名
          3.参数个数不同或参数类型不同
          4.函数重载和返回值类型无关
          5.java是严谨性语言,如果函数出现调用的不确定性,会编译失败
          */
    
           //加法运算,两个整数的和
          public static int add(int a,int b)
          {
              return a+b;
          }
    
           //加法运算,两个小数的和
           public static double add(double a,double b)
          {
               return a+b;
           }
    
           //加法运算,三个整数的和
           public static int add(int a,int b,int c)
          {
               return a+b+c;
           }
    
           /*
           打印乘法表
           */
           public static void printCFB(int num)
          {
              for (int x=1;x<=num ;x++ )
              {
                  for (int y=1; y<=x;y++ )
                  {
                      System.out.print(y+"*"+x+"="+y*x+"\t");//使用制表符'\t'能够实现输出时对齐
                  }
                  System.out.println();
              }
           }
    
           /*
           打印标准乘法表
           */
           public static void printCFB()
          {
                  printCFB(9);
           }
      }

    数组(引用数据类型)
        概念:同一种类型数据的结合,其实数组就是一个容器
        数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素
        格式1
            元素类型[] 数组名=new 元素类型[元素个数或数组长度];
            int[] arr=new int[5]
        格式2
            元素类型[] 数组名=new 元素类型[] {元素,元素,……};
            int[] arr=new int[]{3,5,1,7};
            int[] arr={3,5,1,7};
        内存的划分
            1.寄存器
            2.本地方法区
            3.方法区
            4.栈内存
                 存储的都是局部变量(程序运行时,方法要进栈,否则,局部变量无法进栈)。
                 而且变量所属的作用域一旦结束,该变量就自动释放
            5.堆内存
                 存储的是数组和对象(其实数组就是对象);凡是new建立的,都在堆中
                 特点:
                 1.每一个实体都有首地址值
                 2.堆内存中的每个变量都有默认初始化值,根据类型的不同而不行(整数是0,小数是0.0或0.0f,boolean是false,char'\u0000')
                 3.垃圾回收机制
           
            arr不做任何实体指向,则arr=null;//数组arr为空,所有元素的值都为默认初始化值
            int[] x=new int[3];//假设首地址为0x0034,数组内元素为x{0,0,0}
            int[] y=new int[3];//假设首地址为0x0087,y{0,0,0}
            x[0]=9;//x{9,9,9}
            y[0]=34;//x{34,0,0}
            x=y;//首地址变为0x0087,x{34,0,0}
            多个数组变量可以指向同一个实体。
      

    class ArrayDemo
      {
          public static void main(String[] args)
          {
              //元素类型[] 数组名=new 元素类型[元素个数或数组长度];
              int[] arr=new int[3];
              arr[0]=89;
    
              System.out.println(arr[0]);
          }
      }

    数组
        数组的遍历
      

    class ArrayDemo3
      {
          public static void main(String[] args)
          {
              /*
              需要一个容器,但是不明确容器的具体数据
              */
              //int[] arr=new int[3];
    
              /*
              需要一个容易,存储已知的具体数据
              */
              //int[] arr=new int[]{89,34,270,17};
              int[] arr={89,34,270,17}; //静态初始化方式
    
              /*
              对数组操作最基本的动作就是存和取
              核心思想:就是对角标的操作。
              */
              //数组的遍历
              for (int i=0;i<arr.length ;i++ ) //arr.length,可以获取数组的长度
              {
                  System.out.println("arr["+i+"]="+arr[i]+";");
              }
          }
      }

        获取数组中的最值
       

    class  ArrayDemo4
       {
           public static void main(String[] args)
           {
               int[] arr={-34,-19,-11,-109,-3,-56};
               System.out.println("max="+getMax(arr));
               System.out.println("max="+getMax_2(arr));
               System.out.println("min="+getMin(arr));
           }
    
           /*
           获取数组中的最大值
           思路:
               1.需要进行比较,并定义变量记录每次比较后较大的值
               2.对数组中的元素进行遍历取出,和变量中记录的元素进行比较,
               如果遍历到的元素大于变量中记录的元素,就用变量记录较大的值
               3.遍历结束,该变量记录就是最大值
    
           定义一个功能来实现:
           明确1:结果
                       是数组中的元素,int型
           明确2:未知内容
                       数组
           */
           public static int getMax(int[] arr)
           {
               //定义变量记录较大值
               int max=arr[0];
               for (int i=1;i<arr.length ;i++ )
               {
                   if(arr[i]>max)
                       max=arr[i];
               }
               return max;
           }
    
           public static int getMax_2(int[] arr)
           {
               //定义变量记录较大值
               int maxelement=0;
               for (int i=0;i<arr.length ;i++ )
               {
                   if(arr[i]>arr[maxelement])
                       maxelement=i;
               }
               return arr[maxelement];
           }
       }

        排序
            选择排序
       

    class SelectSort
       {
           public static void main(String[] args)
           {
               int[] arr={34,19,11,109,3,56};
               getArr(arr);
               selectSort(arr);
               getArr(arr);
               selectSort_2(arr);
               getArr(arr);
           }
    
           /*
           选择排序:
           思路:
               1.第一个元素与后边的所有元素比较,将最小值放在arr[0],比较次数为arr.length-1
               2.需要多轮排序,且每次的比较次数 -1
               3.需要一个变量作为中转
               4.返回排好序的数组
           */
           public static void selectSort(int[] arr)
           {
               for (int i=0;i<arr.length-1 ;i++ ) //外循环中最多取到arr[arr.length-1]即可,此时就是arr[length-1]与arr[length]比较,比较之后结束
                   for (int j=i+1;j<arr.length ;j++ )
                   {
                       if (arr[i]>arr[j])
                       {
                           swap(arr,i,j);
                       }
                   }
           }
    
           /*
           高效选择排序
           使用变量记录角标,获得最小值角标之后,只进行一次交换,提高了效率
           */
           public static void selectSort_2(int[] arr)
           {
               for (int i=0;i<arr.length-1 ;i++ )
               {
                   int num=arr[i],index=i;
                   for (int j=i+1;j<arr.length ;j++ )
                   {
                       if (num>arr[j])
                       {
                           num=arr[j];
                           index=j;
                       }
                   }
                   swap(arr,i,index);
               }
           }
    
           /*
           遍历取出数组中的元素
           */
           public static void getArr(int[] arr)
           {
               System.out.print("[");
               for (int i=0;i<arr.length ;i++ )
               {
                   if(i!=arr.length-1)
                   {
                   System.out.print(arr[i]+","); //使用System.out.print(arr[i]+','),输出结果为47556378100109,而使用System.out.print(arr[i]+“,")则能正常输出3,11,19,34,56,109,
                   //解决:使用' ',在输出时强制转换为int型(int类型+char类型=int类型),而使用" ",int类型+string类型不能进行转化,只能在输出的数后边添加字符串
                   }
                   else
                       System.out.print(arr[i]);
               }
               System.out.print("]");
               System.out.println();
           }
    
           /*
           实现交换功能:实现arr[i]与arr[i+1]值的交换
           */
           public static void swap(int[] arr,int a,int b)
           {
               int temp=arr[a];
               arr[a]=arr[b];
               arr[b]=temp;
           }
       }

            冒泡排序
           

    class BubbleSort
           {
               public static void main(String[] args)
               {
                   int[] arr={34,19,11,109,3,56};
                   getArr(arr);
                   bubbleSort(arr);
                   getArr(arr);
                   bubbleSort_2(arr);
                   getArr(arr);
               }
    
               /*
               冒泡排序
                   1.相邻两个元素相比,较大的后移(下沉)
                   2.下一次比较比本次比较次数-1,且最后面的i个元素已排好序,不需要比较
                   3.总共需要排序arr.length-1次
                   4.内循环-1,为了避免角标越界;为了让外循环增加一次,内循环参数与比较的元素个数递减
               */
               public static void bubbleSort(int[] arr)
               {
                   for (int i=0;i<arr.length-1 ;i++)
                   {
                       for (int j=0;j<arr.length-1-i;j++ ) //外循环次数+1,则内循环需要比较次数-1
                       {
                           if (arr[j]>arr[j+1])
                           {
                               swap(arr,j,j+1);
                               //int temp;
                               //temp=arr[j];
                               //arr[j]=arr[j+1];
                               //arr[j+1]=temp;
                           }
                       }
                   }
               }
    
               /*
               1.外循环从最后一个元素开始取值
               2.外循环每次角标-1
               3.内循环的比较次数随着外循环的变化而变化
               */
               public static void bubbleSort_2(int[] arr)
               {
                   for (int i=arr.length-1;i>0 ;i-- )
                   {
                       for (int j=0;j<i ;j++ )
                       {
                           if (arr[j]>arr[j+1])
                           {
                               swap(arr,j,j+1);
                               //int temp;
                               //temp=arr[j];
                               //arr[j]=arr[j+1];
                               //arr[j+1]=temp;
                           }
                       }
                   }
               }
    
               /*
               遍历输出数组元素
               */
               public static void getArr(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.print(arr[i]);
                   }
                   System.out.print("]");
                   System.out.println();
               }
    
               /*
               实现交换功能:实现arr[i]与arr[i+1]值的交换
               */
               public static void swap(int[] arr,int a,int b)
               {
                   int temp=arr[a];
                   arr[a]=arr[b];
                   arr[b]=temp;
               }
           }

        数组的查找
          

    /*
          面试题
          给定一个有序的数组,如果往该数组中存储一个元素,并保证这个数组还是有序的,
          那么这个元素的存储的角标如何获取
          {13,15,19,20,33,45,78,106}
          */
          import java.util.*;
          class ArrayDemo5
          {
              public static void main(String[] args)
              {
                  //int[] arr={4,1,5,7,3,8,2};
                  int[] arr={13,15,19,28,33,45,78,106};
                  //int index=getIndex(arr,50);
                  //System.out.println("index="+index);
                  int index1=halfSearch(arr,50);
                  System.out.println("index="+index1);
                  int index2=halfSearch_2(arr,50);
                  System.out.println("index="+index2);
    
                  int index3=Arrays.binarySearch(arr,50);//java中的折半查找
                  /*
                  如果存在,则返回的是具体的角标位置;不存在,则返回的是 -插入点-1。
                  */
                  System.out.println("indxe="+index3);
    
    
              }
    
              /*
              数组常见功能:查找。
              1.确定需要查找的数组
              2.确定需要查找的元素
              需要两个形参
              */
              public static int getIndex(int[] arr,int key)
              {
                  for (int i=0;i<arr.length-1 ;i++ )
                  {
                      if (arr[i]==key)
                      {
                          return i;
                      }
                  }
                  return -1;
              }
    
              /*
              折半查找(二分查找)
                  1.数组必须为有序数组
                  2.头角标和尾角标可能变化,故需要变量min,max
                  3.中间角标为mid=(min+max)/2
                  4.如果要查找的值key>arr[mid],则该值可能在后半部分,min+1;否则,可能在前半部分,max-1
                  5.当max<min时,停止查找,该数组中没有要查找的值key
              */
              public static int halfSearch(int[] arr,int key)
              {
                  int max,min,mid;
                  min=0;
                  max=arr.length-1;
                  mid=(min+max)/2;
                  while(key!=arr[mid])//当key==arr[mid]时,查找成功,停止查找
                  {
                      if (key>arr[mid])
                          min=mid+1;
                      else if (key<arr[mid])
                          max=mid-1;
                      if(max<min)
                          //return -1;//查找结束,该数组中不存在此元素
                          return  min;//返回插入点
                      mid=(min+max)/2;
                  }
                  return mid;
              }
    
              public static int halfSearch_2(int[] arr,int key)
              {
                  int max,min,mid;
                  min=0;
                  max=arr.length-1;
    
    
                  while(min<=max)//当min>max时,整个数组已查找完毕,停止查找
                  {
                      mid=(min+max)/2;
                      if (key>arr[mid])
                          min=mid+1;
                      else if (key<arr[mid])
                          max=mid-1;
                      else
                          return mid;
                  }
                  //return -1;//查找结束,该数组中不存在此元素
                  return min;//返回插入点
              }
          }

    进制转换

    class ArrayTest3 
    {
        public static void main(String[] args) 
        {
            toHex(60);
            toBinary(6);
            toOctal(8);
            System.out.println(Integer.toBinaryString(6));//二进制转换
    
        }
        //十进制转十六进制
        public static void toHex(int num)
        {
            trans(num,15,4);
        }
        //十进制转八进制
        public static void toOctal(int num)
        {
            trans(num,7,3);
        }
        //十进制转二进制
        public static void toBinary(int num)
        {
            trans(num,1,1);
        }
        public static void trans(int num,int base,int offset)
        {
            if(num==0)
            {
                System.out.println("0");
                return ;//如果不写return,则后边的代码会继续执行
            }
            char[] chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
            /*
            查表时会查到比较多的数据,数据一多,就先存储后再进行操作
            所以,需要定义一个数组,作为临时容器
            */
            char[] arr=new char[32];
            int pos=arr.length;
            while(num!=0)
            {
                int temp=num&base;
                arr[--pos]=chs[temp];
                num=num>>>offset;
            }
            printHex(arr,pos);
            System.out.println();
    
        }
    
        public static void printHex(char[] arr,int pos)
        {
            for (int x=pos;x<=arr.length-1 ;x++ )
            {
                    System.out.print(arr[x]);
            }
        }
    }
    
    

    二维数组
        格式1:int[][] arr=new int[3][2];
            定义了名称为arr的二维数组
            二维数组中有3个以为数组
            每一个一维数组中有2个元素
            一维数组的名称分别为arr[0],arr[1],arr[2]
            给第一个一维数组的1脚标位赋值78:arr[][1]=78;
        格式2:int [][] arr=new int[3][];
            分别对二维数组中的每一个小数组进行初始化:
            arr[0]=new int[2];
            arr[1]=new int[1];
            arr[2]=new int[3];
        格式3:
            静态定义一个二维数组
            int[][] arr={{3,1,7},{5,8,2,9},{4,1}};

      /*
    二维数组定义的格式
    */
    class  Array2Demo
    {
        public static void main(String[] args)
        {
            //int[] arr=new int[3];
            //System.out.println(arr);//[I@bdb503,@左边是实体的类型,右边是实体的哈希值
    
            //int[][] arr=new int[3][2];//创建一个二维数组,该数组中有3个一维数组,每个一维数组中有2个元素
    
            //System.out.println(arr);//直接打印二维数组,[[I@bdb503,@左边有两个[,是二维数组
            //System.out.println(arr[0]);//打印二维数组中脚标0的一维数组,@左边有1个[,是一维数组
            //System.out.println(arr[0][0]);//打印二维数组中脚标0的一维数组中脚标为0的元素
    
            //int[][] arr=new int[3][];
            //System.out.println(arr);//直接打印二维数组,[[I@bdb503,@左边有两个[,是二维数组
            //System.out.println(arr[0]);//一维数组未初始化,null
            //System.out.println(arr[0][0]);//一维数组为初始化,一维数组中没有元素(不是元素为0)
    
            //int[][] arr=new int[3][2];
            //System.out.println(arr.length);//打印二维数组的长度,其实就是一位数组的个数
            //System.out.println(arr[1].length);//打印脚标为1的一维数组的长度
    
    
            /*
            遍历二维数组
            */
            int[][] arr={{3,1,7},{5,8,2,9},{4,1}};
            int sum=0;
            for (int x=0;x<arr.length ;x++ )
            {
                System.out.print("{");
                for (int y=0;y<arr[x].length ;y++ )
                {
                    if(y!=arr[x].length-1)
                        System.out.print(arr[x][y]+",");
                    else
                        System.out.print(arr[x][y]);
                    sum+=arr[x][y];
                }
                System.out.println("}");
    
            }
            System.out.println("sum="+sum);
        }
    }
  • 相关阅读:
    渣渣小本求职复习之路每天一博客系列——Java基础(9)
    渣渣小本求职复习之路每天一博客系列——Java基础(8)
    渣渣小本求职复习之路每天一博客系列——Java基础(7)
    渣渣小本求职复习之路每天一博客系列——Java基础(6)
    渣渣小本求职复习之路每天一博客系列——Java基础(5)
    渣渣小本求职复习之路每天一博客系列——Java基础(4)
    渣渣小本求职复习之路每天一博客系列——Java基础(3)
    渣渣小本求职复习之路每天一博客系列——数据结构与常用算法(3)
    redis常用命令
    redis的sets类型
  • 原文地址:https://www.cnblogs.com/chenchong/p/2601539.html
Copyright © 2011-2022 走看看