一 .数据类型的补充

1.char数据类型在在内存中是以数据存储的,范围是0~65535之间,没一个数都影射 一个字符,参与运算则以数字显示,不参与运算一字符形式显示。

eg:

package org.west;

public class RabbitNum {

    public static void main(String[] args) {

    char c=97;

    System.out.println("不参与运算:"+c);

    System.out.println("参与运算:"+(c+7));

        }

}


例中程序输出结果为:不参与运算:a

参与运算:104

2.byte,short,char变量一旦 参与运算,编译器就会将运算的结果转化为int型。

eg:

    package org.west;

    public class RabbitNum {

        Public static void main(String[] args) {

            byte b1=1;

            byte b2=2;

            //byte b3=b1+b2;//此时报错

            byte b3=(byte)(b1+b2);//强制转换

            char a1=4;

            char a2=3;

            //char a3=a1+a2;//此时报错

            char a3=(char)(a1+a2);//强制转换

        System.out.println(b3);

            System.out.println(a3);

        }

    }

(short与bytechar原理相同,故不再举例)

3.当给整数byte,short,char型变量以“直接常量”的方式赋值时,只要这些“直接常量”没有超过这些数据类型的范围时,都可以直接赋值。

eg:byte a=2;


二.方法

1.方法格式:

修饰符 返回值类型 方法名(形式参数列表){

        执行语句

        ..........

        Return 返回值

      }

对于上述语法格式具体说明如下:

·修饰符:有静态修饰符static,还有最终修饰符final等,对方法进行修饰。

·返回值类型:用于限定方法返回值的数据类型。

·参数类型:用于限定调用方法时传入的参数数据类型。

·参数名:是一个变量,用于接收调用方法是传入的数据。

·return关键字:用于结束方法以及返回方法指定类型的值。

·返回值:被return语句返回的值,该值会返回给调用者。

2.参数的两种形式:

·形式参数:在方法定义时用于接收外界输入的数据。

·实际参数(实参):调用方法时实际传给方法的数据。

3.方法参数的传递:(1)传基本数据类型,方法接收到的实际上是这个值得拷贝。

                (2)传引用类型的参数是,实际传的是引用的副本。

4.方法的返回值:(1)无返回值类型,用void。

                (2)有返回值,必须用return,返回值类型为返回值的类型。

                (3)如果在方法中直接写return,而没有返回值,则方法结束。

Eg01:

    package com.baidu;

    public class NonReturn {

    public static void main(String[] args) {

        printQitao(3,5);

        printQitao(6,7);

        printQitao(3,9);

    }

    public static void printQitao(int height,int width){

        for(int x=1;x<=height;x++){

            for(int y=1;y<=width;y++){

            System.out.print("*");

        }

        System.out.println( );

      }

        System.out.println();

        }

    }

Eg01中使用void是为无返回类型

Eg02:

        package com.baidu;

        import java.util.Scanner;

        public class HaveReturn {

          public static void main(String[] args) {

            Scanner scan=new Scanner(System.in);

            System.out.print("请输入长方形的长:");

            int height=scan.nextInt();

            System.out.print("请输入长方形的宽:");

                int width=scan.nextInt();

            int area=getArea(height,width);

            System.out.println("此长方形的面积为:"+area);

              }

          public static int getArea(int x,int y){

                int temp=x*y;

            return temp;

      }

    }

Eg02是为无返回值类型

5.方法的调用:

·直接调用:方法名(参数)

·类名调用:类名.方法名(参数)

·对象调用:对象.方法名(参数)

6.递归算法【重点】(递推与回归):方法实现自我调用,自己调用自己。条件:(1)递归出口,(2)逐层递归,向其出口接近。

Eg:

        package com.baidu;

        import java.util.Scanner;

        public class Recursion {

            public static void main(String[] args) {

            Scanner scan=new Scanner(System.in);

                System.out.println("请输入要累加的个数:");

                    int num=scan.nextInt();

                int sum=getSum(num);

            System.out.println("1到"+num+"的和是:"+sum);

         }

            public static int getSum(int x){

                if(x==1){

                return 1;

            }else{

        int temp=getSum(x-1);

        return temp+x;

        }

     }

例中实现了方法的递归,用来计算一到num之间整数的累加。

方法部分小结:(以解决汉诺塔游戏的程序来综合总结)

Eg:

        package com.game;

        import java.util.Scanner;

        public class Hanoi {

            public static int count=0;

                public static void main(String[] args) {

                    Scanner scan=new Scanner(System.in);

                System.out.println("请输入盘子数:");

                int sum=scan.nextInt();

                hanoi(sum,'A','B','C');

            }

            public static void  hanoi(int panNumber,char start,char help,char dest){

                if(panNumber==1){

                            count++;

                    System.out.println("这是第"+count+"次移动,将一个盘子从"+start+"棒移动到"+dest+"棒上");

                }else{

                hanoi(panNumber-1,start,dest,help);

                count++;

                System.out.println("这是第"+count+"次移动,将一个盘子从"+start+"棒移动到"+help+"棒上");

            hanoi(panNumber-1,help,start,dest);

                        }

            }

        }


三.数组

·属于引用数据类型,用来相同类型的一组数据(声明一个数组就是在内存中划出一串连续的空间)。

·标识符:数组的名称,用来区分不同类型的数组。

·长度属性:length(固定不变,避免越界)。

·元素下标:对数组元素进行编号,从0开始,数组中所有元素都可以通过下标来访问。

  1. 声明数组:(1)int[] score1
  2. int score2[]  (3)String[] name
    声明时不规定长度,int,String等是数据类型,score1,score2等是数组名称。
  3. 分配空间:(空间连续)
    Eg:score=new int[30];
    Avage=new int[6];
    Name=new String[7];
  4. 数组格式:
    数据类型[] 数组名=new 数据类型[大小]
    Eg:int[] a=new int[大小]
    Int[] a={元素...........}
  1. 数组遍厉:(1)通过for循环获取数组元素的下标,然后遍历对应元素
           格式for(int i=0;i<array.length;i++){
                    // 逐个遍历元素array[i]
             }
    (2)foreach输出
    数据类型 变量名称:数组名称){
                   …
         }
    对上述两种遍厉方法举例说明:
    Eg:
    package org.bai;
    public class ArrayDemo {
    public static void main(String[] args) {
    int[] a=new int[7];
    a [0]=23;
    a [1]=44;
    a [2]=56;
    a [3]=66;
    a [4]=78;
    System.out.println("遍历第一个数组:");
    for(int i=0;i<a.length;i++){
    System.out.print(a [i]+" ");
    }
    System.out.println();
    int[] b={78,56,45,67,90,2,12,23};
    System.out.println("遍历第二个数组:");
    for(int i=0;i<b.length;i++){
    System.out.print(b[i]+" ");
    }
    System.out.println();
    System.out.println("新方法遍厉b数组:");
    for(int x:b){
    System.out.print(x+" ");
    }
    }
    }
  1. 数组的内存图

    Java学习总结(二)-----(改进)_数组

  2. (补充)方法的可变参数:方法中可传递的参数不再固定,而可以传递数量不等的参数。
    定义格式:返回值类型 方法名称(类型... 参数名称)
    Eg:
    package org.bai;
    public class ChangNumber {
    public static void main(String[] args) {
    show(4,5);
    show(6,9,8,2);
    show(4,57,2);
    }
    public static void show(int...a){
    System.out.println("当前数组有:"+a.length+"个元素"  );
    for(int i=0;i<a.length ;i++){
    System.out.print(a[i]+" ");
    }
    System.out.println();
    }
    }
  3. 数组的拷贝:利用system中的静态方法:
    public static native void arrayCopy(object src,int srcPos,object dest ,int  destPOS,int length)
    ·src:源数组
    ·srcPos:源数组起始位置
    ·dest:目标数组
    ·destPos:目标数组起始位置
    ·length:拷贝数组元素个数
  4. 排序【重点】
    (1)冒泡排序: 共有n个数据,则需要进行n-1趟排序(可优化),每一趟排序都会过“两两交换”的方式对数据进行比较,每一趟排序后都会将本趟排序的最大值“冒”到后面。
    Eg:
    package org.bai;
    public class bubbleSort {
    public static void main(String[] args) {
    int[] a={45,12,76,65,23,67,25,89,47};
    bubbleSort(a);
    }
    public static void bubbleSort(int[] a){
    for(int i=1;i<a.length;i++){
    for(int j=0;j<a.length-i;j++){
    if(a[j]>a[j+1]){
    int temp=a[j];
    a[j]=a[j+1];
    a[j+1]=temp;
    }
    }
    System.out.println("这是第"+i+"次排序,结果为:");
    for(int x:a){
    System.out.print(x+" ");
    }
    System.out.println();
    }
    }
    }

(2)插入排序:对一个有n个元素的数据序列,排序需要进行n-1趟插入操作(可优化)。

         第一趟插入将第2个元素插入前面的有序子序列(此时前面只有一个元    素)。

          第二趟插入将第3个元素插入前面的有序子序列,前面两个元素是有序的。

          第n-1趟插入将第n个元素插入前面的有序子序列,前面n-1个元素是    有序的

            package org.bai;

            public class InsertSort {

            public static void main(String[] args) {

            int[] a={45,12,76,65,23,67,25,89,47};

            insertSort(a);

            }

            public static void insertSort(int[] a){

            for(int i=1;i<a.length-1;i++){

            int dete=a[i];

            int j=i+1;

            if(j>=0 && dete>a[j]){

             

                        }

                }

        }

    }

(3)快速排序:从待排序的数据序列中任取一个数据(如第一个数据)作为分界值,所有比    它小的数据元素放到左边,所有比它大的数据元素放到它的右边。

       接下来,对左右两个子序列按照上述方法进行递归排序,直到排序完成。

Eg:

package sort;

public class QuickSort {

public static void main(String[] args) {

int[] a={22,55,11,66,88,77,44,99,33};

quickSort(a,0,a.length-1);

for (int i = 0; i < a.length; i++) {

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

}

}

public static void quickSort(int[] array,int start,int end){

if(start>=end){

return;   

}

int data=array[start];   

int i=start+1;  

int j=end;   

while(true){

while(i<=end && array[i]<data){

i++;   

}

while(j>=start+1 && array[j]>data){

j--;   

}

if(j>i){

int temp=array[i];

array[i]=array[j];

array[j]=temp;

}else{

break;

}

}

array[start]=array[j];

array[j]=data;   

quickSort(array,start,j-1);   

quickSort(array,j+1,end);   

}

}


四.二维数组

  1. 声明实例化:
    格式:数据类型[] 数组名称=new 数据类型[行的个数][列的个数]
    ·length是他们包含行的个数
  2. 访问具体元素的语法:
    格式:数组名称[行索引][列索引]
  3. 二维数组的遍厉:
    Eg:package com.baidu;
    public class ArrayDemo {
    public static void main(String[] args) {
    int[][] a=new int[3][4];
    a[0] =new int[]{22,33,44,55};
    a[1] =new int[]{23,35,45,26};
    a[2] =new int[]{24,37,28,56};
    for(int i=0;i<a.length;i++){   
    for(int j=0;j<a[i].length;j++){   
    System.out.print(a[i][j]+"  ");
    }
    System.out.println();
    }
    }
    }
  4. (补充)二维数组的使用
    Eg:package org.bai;
    public class ArraySum {
    public static void main(String[] args) {
    int[][] a=new int[3][4];
    a[0] =new int[]{22,33,44,55};
    a[1] =new int[]{23,35,45,26};
    a[2] =new int[]{24,37,28,56};
    int sum=0;
    for(int i=0;i<a.length;i++){
    int groupsum=0;
    for(int j=0;j<a.length;j++){
    groupsum+=a[i][j];
    System.out.println("小组内每"+(j+1)+"人的销售额:  "+groupsum);
    }
    sum+=groupsum;
    System.out.println("第"+(i+1)+"组的总销售额是:"+sum);
    System.out.println("***************");
    }
    System.out.println("本季度总销售额是:"+sum);
    }
    }
    本次总结小结:
    ·难点:(1)方法递归
    (2)数组快速排序