方法与数组

1.方法(面向对象)

1.概念:

​ 执行特定业务逻辑操作的结构体,在java中称为方法,在c语言中称为函数。

2.语法:

​ 访问修饰符 返回值类型 方法名([参数1……参数n(参数列表)]){

​ 方法体(执行特定操作的内容)

​ }

方法四要素:

​ 访问修饰符: public static | private(私有) | protected(受保护) | 默认

​ 返回值:方法的返回结果类型,类型可以是:引用类型、基本数据类型

​ 方法名:自定义,命名规则和变量相同

​ 参数列表:(可有可无)没有参数称为无参方法,反之有参数方法,方法定义时的参数称为形参,调用时的参数为实参数。

注意:如果方法有返回值,则必须以return结束

3.方法调用

形式一:直接调用

​ 被调用方法名([实参列表]);(有无返回值均可,建议针对无返回值方法)

形式二:输出调用

​ System.out.println(方法([实参列表]));(针对有返回值的方法)

形式三:赋值调用

​ 数据类型 变量名 = 方法([实参列表]);(针对有返回值的方法)

注意:1.方法调用时的参数列表(数量、数据类型、先后顺序)必须和方法定义时的参数列表约束一致

​ 2.返回值:如需对返回值进行赋值,则赋值变量的数据类型一定要和方法定义时的返回值类型吻合

4.调用流程图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eiO3Qe7O-1604928935499)(C:\Users\赵童\Pictures\Saved Pictures\微信图片编辑_20201028220306.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g4ZzW0og-1604928935504)(C:\Users\赵童\Pictures\Saved Pictures\微信图片_20201028223837.png)]

5.方法重载

条件:

1.在同一个类中

2.方法名相同

3.参数列表不同(数量、数据类型、顺序)

4.与返回值和访问修饰符没有关系

意义:

为了更好的解决方法名相同的情况下,执行不同的业务操作。

package org.wdit.unit03.MethodDemo;
/** * 方法重载: 
* 条件:
* 1.在同一个类中
* 2.方法名相同
* 3.参数列表不同(数量、数据列表、顺序)
* 4.与返回值和访问修饰符无关 */
public class MethodDemo2 {    
    public static int sum(int num1,int num2){        
        return num1+num2;    }   
    public static double sum(double num1,double num2,double num3){        
        return  num1+num2+num3;    }    
    public static void main(String[] args){        
        System.out.println(sum(1,2));        
        double sum = sum(1,2,3);        
        System.out.println(sum);    }

2.一维数组

1.概念.

用于储存一组相同类型的变量(容器),这就是数组

2.声明格式

2.1数据类型 数组名[];

2.2数据类型[] 数组名;

3.初始化方式

3.1动态初始化:我们定义数组的长度,由系统自动为数组赋初始值

格式: 数据类型 数组名[] = new 数据类型[数组长度];

//定义用于储存全班40名同学的考试成绩

double scores[] = new double[40];//此时系统给与的默认值为0.0

3.2静态初始化:我们给数组赋初始值,系统来决定长度

格式1: 数据类型 数组名[] = new 数据类型[]{元素1,元素2……元素n}

格式2: 数据类型 数组名[] = {元素1,元素2……元素n}

4.数组元素值的获取与设置

格式: 数组名[索引]=赋值内容;//设置数组元素内容

​ 数组名[索引];//获取数组元素内容

注意 :索引从0开始,数组最大索引为数组长度-1;如果索引超过边界量,则报索引越界异常

package org.wdit.unit03.MethodDemo;
public class ArrayDemo {    
    public static void main(String[] args){
        //        int scores[]=new int[3];
        //        double chenJi[]={98,95,96,97,98,99,99.5,99.2};
        //        scores[2]=2;
        //        System.out.println(scores);
        //        System.out.println(chenJi);
        //     System.out.println(chenJi[0]);
        //    System.out.println(chenJi[2]);
        //     System.out.println(chenJi[3]);
        //     System.out.println(chenJi[5]);
        //    System.out.println(scores[1]);
        //    System.out.println(scores[2]);       
        //定义用于储存全班10名同学的名字
        String name[]=new String[10];        
        System.out.println(name);
        //用于储存全班10名同学的成绩
        double score[]={85,60,75.5,66,75,78,65,99,85,95};        
        System.out.println(score);        
        name[0]="赵童";//手动为数组第一个元素赋值赵童        
        name[1]="屈波";//手动为数组第一个元素赋值屈波        
        name[2]="唐康";//手动为数组第一个元素赋值唐康        
        name[3]="王必武";//手动为数组第一个元素赋值王必武        
        System.out.println(name[0]+"的成绩" + score[7]);        
        System.out.println(name[1]+"的成绩"+score[8]);        
        System.out.println(name[2]+"的成绩"+score[9]);        
        System.out.println(name[3]+"的成绩"+score[0]);    
    }
}
5.内存分布
栈(stack):

存放的都是方法中的局部变量,方法的运行一定要在栈中运行

​ 局部变量:方法的参数或者是定义在方法体内的内部变量

​ 作用域:一旦超过作用域,立即从栈当中消失

堆(heap):

凡是new出来的内容,都在堆内存中

堆里储存的元素都是 ⼀个个的地址值:16进制

堆内存中的元素都是有默认值的:规则如下:

整数 0

浮点数 0.0

字符 ‘\u0000’ Boolean false

引⽤类型 null

方法区(method area):

存储.class 相关的信息,包含⽅法的信息

本地方法区( native method area ): 与操作系统相关 此阶段了解即可 寄存器:与CPU 相关,此阶段了解即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ATT8kExd-1604928935508)(C:\Users\赵童\Pictures\Saved Pictures\微信图片_20201028225322.png)]

6.数组的常见操作

1、数组元素遍历

package org.wdit.unit03.MethodDemo;
import java.util.Scanner;
/**
* 数组应用一 
* 需求:动态录入班级学员的姓名
*/
public class ArrayDemo1 {    
    public static void main(String[] args){       
        //1.创建键盘录入对象        
        Scanner input = new Scanner(System.in);        
        //控制台提示用户输入班级学员数量        
        System.out.println("请输入王者四班学员数量:");        
        //定义用于储存学员数量的变量        
        int num = input.nextInt();        
        //2.动态创建用于储存学员姓名的容器        
        String names[] = new String[num];        
        //3.动态为数组元素赋值        
        for (int i = 0 ; i < names.length ; i++){            
            System.out.print("请输入第"+(i+1)+"名学员的姓名:");
            String name = input.next();
            names[i] = name;            
            System.out.println();        
        }        
        System.out.println("学员信息如下");       
        //4.遍历数组并输出数组元素        
        for (int i=0;i< names.length;i++){           
            System.out.println("第"+(i+1)+"名学员的名字:"+names[i]);        
        }    
    }
}

2、求最值

package org.wdit.unit03.MethodDemo;
import java.util.Scanner;
/**
* 动态录入王者四班的学员考试成绩并求出最值
*/
public class ArrayDemo3 {   
    public static void main(String[] args){       
        //1.创建键盘录入对象        
        Scanner input= new Scanner(System.in);        
        //2.控制台提示用户输入班级人数        
        System.out.print("请输入王者四班班级人数:");        
        //接受并储存班级人数        
        int num = input.nextInt();        
        //3.创建用于储存学员考试成绩的容器(数组)并且动态开辟空间,空间大小来自班级人数数量        
        int scores[] = new int[num];        
        //4.循环遍历数组并且为每一个元素进行动态赋值        
        for (int i = 0 ; i< scores.length;i++){            
            System.out.print("请输入第"+(i+1)+"名学员的成绩");            
            int score = input.nextInt();            
            scores[i] = score;        
        }        
        /**        
        * 1.求最大值        
        * 分析: :假设数组中第⼀个元素为最⼤值        
        *          循环遍历,将每次循环产⽣的元素和所谓的最⼤值进⾏⽐较         
        *          如果⽐最⼤值⼤,则将最⼤值赋给max变量         
        *          最后max变量中存储的就是最⼤值         */        
        int max = scores[0];//假设数组中第⼀个元素为最⼤值        
        int min = scores[0];//假设数组中第⼀个元素为最⼩值        
        for ( int i=1;i< scores.length;i++){            
            //判断每⼀个元素是否⽐最⼤元素⼤            
            if (scores[i]>max){                
                max = scores[i];            
            }            
            //判断每⼀个元素是否⽐最⼩元素⼩            
            if (scores[i]<min){                
                min = scores[i];            
            }        
        }        
        System.out.println("最大值:"+max);        
        System.out.println("最小值:"+min);    
    }
}

3、逆序

package org.wdit.unit03.MethodDemo;
/** * 数组应用: 
* 需求:给定一个数组,需要进行逆序
* 分析:首先需要将数组进行折半,前半部分替换后半部分
* min = 0 ;
* max = arr.length-1; 
* 循环交换位置 
* 条件:变量初始化:int min =0,int max =arr.length-1;
*      条件: min<max;
*      min++,max--;
*      循环体内容:元素交换
*                 需要中间变量
*                 int temp;
*/
public class ArrayDemo2 {   
    public static void main(String[] args){        
        int arr[] = {1,2,3,4,5,6,7,8,9};        
        System.out.println("逆序前数组中的元素信息如下:");        
        for (int i = 0 ; i < arr.length;i++){            
            System.out.print(arr[i]+" ");        
        }        
        //循环遍历并交换元素        
        for (int min = 0 ,max= arr.length-1; min<max ;min++,max--){            
            int temp=arr[min];            
            arr[min]=arr[max];            
            arr[max]=temp;        
        }        
        System.out.println("\n逆序后数组中的元素信息如下:");        
        for (int j=0;j< arr.length;j++){            
            System.out.print(arr[j]+"\t");        
        }    
    }
}

4、查找元素

package org.wdit.unit03.MethodDemo;
import java.util.Scanner;
/**
* 需求:在已知数组中查找指定元素
* 分析:循环遍历数组,将每次循环产生的元素和查找的元素进行对比,如果内容相等
*/
public class ArrayDemo4 {    
    public static void main(String[] args){        
        Scanner input = new Scanner(System.in);        
        String[] names ={"赵童","屈波","幕佳兵","唐康"};        
        //提示用户输入        
        System.out.print("请输入你要查找的学生姓名:");        
        String name = input.next();        
        boolean flag = false;//标志为变量,默认表示没有查找到        
        for (int i = 0;i<names.length;i++){            
            if (names[i].equals(name)){                
                System.out.println("有这位大神!");                
                flag = true;                
                break;//终止循环           
            }        
        }        
        if (!flag){            
            System.out.println("没你这号");        
        }    
    }
}

3.二维数组

构成:在一维数组上进行了扩展,即一维数组的每一个元素也是一个一维数组,其实java中实际不存在二维数组的结构。

int school[][] = new int[5][];//开启最大维度的长度
school[0] = new int[5];//开启二维数组第一个最大维度元素的空间
school[1] = new int[10];//开启二维数组第二个最大维度元素的空间

格式

格式一:

数据类型[][] 变量名 = new 数据类型[m][n];
//m:二维数组可以储存一维数组的个数
//n:一位数组的长度

格式二:

数据类型[][] 变量名 = new 数据类型[m][];
//m:二维数组可以储存一维数组的个数
//一维数组的长度由我们动态进行指定

格式三:

数据类型[][] 变量名=new 数据类型[][]{{元素一,元素二……元素n},{元素一,元素二……元素n},{元素一,元素二……元素n}}
简化格式:
    数据类型[][] 变量名={{元素一,元素二……元素n},{元素一,元素二……元素n},{}}
2.二维数组的遍历

分析:1. 遍历二维数组中储存的一维数组的个数。for(int i=0;i<arr.length;i++){……}

​ 2.遍历二维数组中每一个一维数组中的元素

​ 提取二维数组中的没一个一维数组:arr[索引]

​ 遍历当前一维数组:for(int j =0;j<arr[索引].length;j++){……}

​ 3.会发现二维数组的遍历 外层循环控制二维数组的最大维度长度

​ 循环控制一维数组的长度

int[][] school={{1,2,3},{4,5},{7,8,9}};//定义二维数组
//遍历二维数组
for(int i=0;i<3;i++){//外层循环控制二维数组的最大长度
    for(int j=0;j<school[i].length;j++){//内层循环控制每一个一维数组的长度
        System.out.println(school[i][j]);
    }
}
package org.wdit.unit03.MethodDemo;

import java.util.Scanner;

//方法&数组
// 二维数组的应用:
//需求:动态录入若干个班级若干名学员的考试成绩,并求出每个班级的总成绩、平均成绩分析:若干个班级需要一个 数组进行存储
//    若干名学员需要一个数组进行存储
//    若干个班级若干名需要一个二维数组
//    班级管理制度
//    若干个:需要通过键盘录入对象scnner进行动态录入
//    录入每个班级每个学员的成绩:需要遍历二维数组
//   计算总成绩、平均成绩:需要将录入元素后的二维数组进行遍历,并计算成绩。
public class ArrayDemoText1 {
    public static void main(String[] args){
        //1.创建键盘录入对象
        Scanner input = new Scanner(System.in);
        //2.提示用户输入数据
        System.out.print("请你输入班级数目:");
        int num = input.nextInt();
        int[][] school=new int[num][];
        for (int i=0;i<school.length;i++){
            System.out.print("请输入第"+(i+1)+"个班级的人数:");
            int number = input.nextInt();
            school[i]=new int[number]  ;
            int sum = 0;
            for (int j = 0; j < school[i].length;j++){

                System.out.print("请输入第"+(i+1)+"班第"+(j+1)+"个同学的成绩");
                int scores = input.nextInt();
                school[i][j] = scores;
                System.out.println("");
                sum=sum+scores;
            }
            System.out.println("第"+(i+1)+"班的总分:"+sum);
            System.out.println("第"+(i+1)+"班的平均分:"+sum/(school[i].length));
        }


    }
}

package org.wdit.unit03.MethodDemo;

public class ArrayDemo {
    public static void main(String[] args){
//        int scores[]=new int[3];
//        double chenJi[]={98,95,96,97,98,99,99.5,99.2};
//        scores[2]=2;
//        System.out.println(scores);
//        System.out.println(chenJi);
//        System.out.println(chenJi[0]);
//        System.out.println(chenJi[2]);
//        System.out.println(chenJi[3]);
//        System.out.println(chenJi[5]);
//        System.out.println(scores[1]);
//        System.out.println(scores[2]);

        String name[]=new String[10];
        System.out.println(name);
        double score[]={85,60,75.5,66,75,78,65,99,85,95};
        System.out.println(score);
        name[0]="赵童";
        name[1]="屈波";
        name[2]="唐康";
        name[3]="王必武";
        System.out.println(name[0]+"的成绩" + score[7]);
        System.out.println(name[1]+"的成绩"+score[8]);
        System.out.println(name[2]+"的成绩"+score[9]);
        System.out.println(name[3]+"的成绩"+score[0]);
        System.out.println("-----------------------------------------------");
        String names[] = new String[]{"赵童","幕佳兵","唐康","屈波"};
        float scores[] = {97,87,77,67};
        for (int i=0;i< scores.length;i++){
            if (scores[i]>=80){
                System.out.println(names[i]+"还不错,还得了"+scores[i]);
            }else{
                System.out.println(names[i]+"不行啊");
            }
        }




    }
}

package org.wdit.unit03.MethodDemo;

import java.util.Scanner;

/**
 * 数组应用一
 * 需求:动态录入班级学员的姓名
 */
public class ArrayDemo1 {
    public static void main(String[] args){
        //1.创建键盘录入对象
        Scanner input=new Scanner(System.in);
        //控制台提示输入班级学员数量
        System.out.println("请输入王者四班学员数量:");
        //定义用于储存学员数量的变量
        int num=input.nextInt();
        //2.动态创建用于储存学员姓名的容器
        String names[]=new String[num];
        //3.动态为数组元素赋值
        for (int i=0;i< names.length;i++){
            System.out.print("请输入第"+(i+1)+"名学员的姓名:");
            String name = input.next();
            names[i] = name;
            System.out.println();
        }
        System.out.println("学员信息如下");
        //4.遍历数组并输出数组元素
        for (int i=0;i< names.length;i++){
            System.out.println("第"+(i+1)+"名学员的名字:"+names[i]);
        }
    }
}

package org.wdit.unit03.MethodDemo;
/**
 * 数组应用:
 * 需求:给定一个数组,需要进行逆序
 * 分析:首先需要将数组进行折半,前半部分替换后半部分
 * min = 0 ;
 * max = arr.length-1;
 * 循环交换位置
 * 条件:变量初始化:int min =0,int max =arr.length-1;
 *      条件: min<max;
 *      min++,max--;
 *      循环体内容:元素交换
 *                 需要中间变量
 *                 int temp;
 */
public class ArrayDemo2 {
    public static void main(String[] args){
        int arr[] = {99,88,77,66,55,61,71,81,91};
        System.out.println("逆序前数组中的元素信息如下:");
        for (int i = 0 ; i < arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        for (int min = 0 ,max= arr.length-1; min<max ;min++,max--){ //循环遍历并交换元素
            int temp=arr[min];
            arr[min]=arr[max];
            arr[max]=temp;
        }
        System.out.println("\n逆序后数组中的元素信息如下:");
        for (int j=0;j< arr.length;j++){
            System.out.print(arr[j]+"\t");
        }
    }
}

package org.wdit.unit03.MethodDemo;

import java.util.Scanner;

/**
 * 动态录入王者四班的学员考试成绩并求出最值
 */
public class ArrayDemo3 {
    public static void main(String[] args){
        //1.创建键盘录入对象
        Scanner input= new Scanner(System.in);
        //2.控制台提示用户输入班级人数
        System.out.print("请输入王者四班班级人数:");
        //接受并储存班级人数
        int num = input.nextInt();
        //3.创建用于储存学员考试成绩的容器(数组)并且动态开辟空间,空间大小来自班级人数数量
        int scores[] = new int[num];
        //4.循环遍历数组并且为每一个元素进行动态赋值
        for (int i = 0 ; i< scores.length;i++){
            System.out.print("请输入第"+(i+1)+"名学员的成绩");
            int score = input.nextInt();
            scores[i] = score;
        }
        /**
         * 1.求最大值
         * 分析: :假设数组中第⼀个元素为最⼤值
         *          循环遍历,将每次循环产⽣的元素和所谓的最⼤值进⾏⽐较
         *          如果⽐最⼤值⼤,则将最⼤值赋给max变量
         *          最后max变量中存储的就是最⼤值
         */
        int max = scores[0];//假设数组中第⼀个元素为最⼤值
        int min = scores[0];//假设数组中第⼀个元素为最⼩值

        for ( int i=1;i< scores.length;i++){
            //判断每⼀个元素是否⽐最⼤元素⼤
            if (scores[i]>max){
                max = scores[i];
            }
            //判断每⼀个元素是否⽐最⼩元素⼩
            if (scores[i]<min){
                min = scores[i];
            }
        }
        System.out.println("最大值:"+max);
        System.out.println("最小值:"+min);
    }
}

package org.wdit.unit03.MethodDemo;

import java.util.Scanner;

/**
 * 需求:在已知数组中查找指定元素
 * 分析:循环遍历数组,将每次循环产生的元素和查找的元素进行对比,如果内容相等
 */
public class ArrayDemo4 {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        String[] names ={"王必武","屈波","唐康","赵童"};
        //提示用户输入
        System.out.print("请输入你要查找的学生姓名:");
        String name = input.next();
        boolean flag = false;//标志为变量,默认表示没有查找到
        for (int i = 0;i<names.length;i++){
            if (names[i].equals(name)){
                System.out.println("有这位大神!");
                flag = true;
                break;//终止循环
            }
        }
        if (!flag){
            System.out.println("没你这号");
        }
    }
}

package org.wdit.unit03.MethodDemo;

import java.util.Scanner;

//方法&数组
// 二维数组的应用:
//需求:动态录入若干个班级若干名学员的考试成绩,并求出每个班级的总成绩、平均成绩分析:若干个班级需要一个 数组进行存储
//    若干名学员需要一个数组进行存储
//    若干个班级若干名需要一个二维数组
//    班级管理制度
//    若干个:需要通过键盘录入对象scnner进行动态录入
//    录入每个班级每个学员的成绩:需要遍历二维数组
//   计算总成绩、平均成绩:需要将录入元素后的二维数组进行遍历,并计算成绩。
public class ArrayDemoText1 {
    public static void main(String[] args){
        //1.创建键盘录入对象
        Scanner input = new Scanner(System.in);
        //2.提示用户输入数据
        System.out.print("请你输入班级数目:");
        int num = input.nextInt();
        int[][] school=new int[num][];
        for (int i=0;i<school.length;i++){
            System.out.print("请输入第"+(i+1)+"个班级的人数:");
            int number = input.nextInt();
            school[i]=new int[number]  ;
            int sum = 0;
            for (int j = 0; j < school[i].length;j++){

                System.out.print("请输入第"+(i+1)+"班第"+(j+1)+"个同学的成绩");
                int scores = input.nextInt();
                school[i][j] = scores;
                System.out.println("");
                sum=sum+scores;
            }
            System.out.println("第"+(i+1)+"班的总分:"+sum);
            System.out.println("第"+(i+1)+"班的平均分:"+sum/(school[i].length));
        }


    }
}

package org.wdit.unit03.MethodDemo;

import java.util.Scanner;

public class ArrayText1 {
    public static void main(String[] args) {
        int[][] number ={{1,2},{3,4}};
        for (int i =0;i< number.length;i++){
            for (int j=0; j< number[i].length;j++){
                System.out.println(number[i][j]);
            }
        }



    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值