五,Java方法

Java方法

一.什麼是方法

所謂方法就是用來解決一類問題的代碼的有序集合,是一個功能模塊。

二.方法聲明

在這裏插入圖片描述
  訪問修飾符:public/private/protected

返回類型:void及各種數據類型;

方法名:和變量一樣

三.方法分類

在這裏插入圖片描述

方法在類的內部定義
  1.無參無返回值:

package com.imooc.function;

public class MethodDemo1 {
    //打印星號
    public void printStar(){
        System.out.println("********************");
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MethodDemo1 myMethod=new MethodDemo1();
        myMethod.printStar();
        System.out.println("哈哈");
        myMethod.printStar();

    }

}

2.無參帶返回值:

package com.imooc.function;

public class MethodDemo1 {
    //打印星號
    public int Rectangle(){
        int length=10,width=3;
        int getArea=length*width;
        return getArea;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int result;
        MethodDemo1 myMethod=new MethodDemo1();
        System.out.println("面積爲:"+myMethod.Rectangle());
    }

}

3.帶參無返回值:

package com.imooc.function;

public class MethodDemo1 {
    public float max(float a,float b){
        float max;
        if(a>b){
            max=a;
        }
        else{
            max=b;
        }
        SYstem.out.print(a+"和"+b+"的最大值是:"+max);
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MethodDemo1 myMethod=new MethodDemo1();
        float a=10.45f,b=5.12f;
        myMethod.max(a, b);
    }

}

4.帶參帶返回值:

package com.imooc.function;

public class MethodDemo1 {
    public int fac(int n){
        int s=1;
        int sum=0;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=i;j++){
                s*=j;
            }
            sum+=s;
            s=1;
        }
        return sum;
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MethodDemo1 myMethod=new MethodDemo1();
        System.out.println("大的爲爲:"+myMethod.fac(3));
    }

}

注:Java方法不能嵌套定義(而Python可以)

四.數組作爲參數

例:

package com.imooc.function;

import java.util.Scanner;

public class GetValue {
    public boolean search(int n,int[] arr){
        boolean flag=false; 
        for(int val:arr){
            if(val==n){
                flag=true;
                break;
            }
        }
        return flag;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("請輸入要查找的數據:");
        int num;
        boolean flag;
        Scanner sc=new Scanner(System.in);
        num=sc.nextInt();
        int[] arr={1,3,5,7,8,2,10,20};
        GetValue getvalue=new GetValue();
        flag=getvalue.search(num, arr);
        if(flag){
            System.out.print("找到了");
        }
        else{
            System.out.print("未找到");
        }


    }

}

五.方法重載

方法名相同,參數列表不同。

例:

package com.imooc.function;

public class MathAdd {
    //求int類型和
    public int plus(int m,int n){
        return m+n;
    }
    //求double類型和
    public double plus(double m,double n){
        return m+n;
    }
    //q求數組元素累加和
    public int plus(int[] arr){
        int sum=0;
        for(int n:arr){
            sum+=n;
        }
        return sum;
    }
    public static void main(String[] args) {
        MathAdd mathadd=new MathAdd();
        //int型
        int intplus=mathadd.plus(1,2);
        System.out.println("int型和:"+intplus);
        double doubleplus=mathadd.plus(1.23,3.468);
        System.out.println("double型和:"+doubleplus);
        int[] arr={1,2,3,4,5,6};
        int arrplus=mathadd.plus(arr);
        System.out.println("數組型和:"+arrplus);

        
        
    }

}

六.傳值

如果在同一個類裏面,某一個方法(非main方法)要調用其他方法,直接調用,而不需要創建對象。

交換值例(基本數據類型):主方法中的m,n值不會變(方法中的值改變不會影響主方法的),只是把值傳遞給a,b

package com.imooc.function;

public class SwapDemo {
    
    public void swap(int a,int b){
        System.out.println("交換前:a="+a+"n="+b);
        int temp;
        temp=a;
        a=b;
        b=temp;
        System.out.println("交換後:a="+a+"b="+b);

    }
    public static void main(String[] args) {
        int m=3,n=5;
        SwapDemo swapdemo=new SwapDemo();
        System.out.println("交換前:m="+m+"n="+n);
        swapdemo.swap(m, n);
        System.out.println("交換後:m="+m+"n="+n);

    }

}

數組傳值(引用數據類型)例:

package com.imooc.function;

public class ListDemo {
    
    public void change(int[] arr){
        arr[3]=-1;
        System.out.println("arr修改數據後:");
        for(int n:arr){
            System.out.print(n+" ");
        }
        System.out.println();

    }
    
    public static void main(String[] args) {
        int[] a={1,2,3,4,5,6,7};
        ListDemo listdemo=new ListDemo();
        System.out.println("a修改前:");
        for(int n:a){
            System.out.print(n+" ");
        }
        System.out.println();
        listdemo.change(a);
        System.out.println("a修改後:");
        for(int n:a){
            System.out.print(n+" ");
        }
        
    }

}
/*
 輸出:
    a修改前:
    1 2 3 4 5 6 7 
    arr修改數據後:
    1 2 3 -1 5 6 7 
    a修改後:
    1 2 3 -1 5 6 7 
*/

Java中參數都是值傳遞:

https://www.zhihu.com/question/31203609

注:Python中都是共享變量

七.可變參數列表

可變參數列表:如int…n(參數中如果有兩個以上參數,可變參數一定是放在最後的位置。且可以把數組的值傳遞給可變參數列表,但是數組作爲參數時不可以將多個值傳遞給數組,一個方法中只能有一個可變參數)

注:Python爲(*args【元組】,**kwargs【字典】)

package com.imooc.function;

public class ArgsDemo {
    
    public void sum(int...n){
        int sum=0;
        for(int i:n){
            sum+=i;
        }
        System.out.println("sum="+sum);
    }
    public static void main(String[] args) {
        ArgsDemo argsdemo=new ArgsDemo();
        argsdemo.sum(1);
        argsdemo.sum(1,2);
        argsdemo.sum(1,2,3);


    }

}
/*
 輸出:
      sum=1
      sum=3
      sum=6

 
 */

可變參數重載問題:可變參數列表所在方法是最後被訪問的

package com.imooc.function;

public class Argsdemo4 {
    public int plus(int a,int b){
        System.out.println("不可變參數方法被調用");
        return a+b;
    }
    public int plus(int...n){
        System.out.println("可變參數列表方法被調用");
        int sum=0;
        for(int i:n){
            sum+=i;
        }
        return sum;
    }
    public static void main(String[] args){
        Argsdemo4 argsdemo=new Argsdemo4();
        System.out.print("和爲:"+argsdemo.plus(1,2));
    }
}
/*輸出:
     不可變參數方法被調用
    和爲:3
*/

文檔註釋:/**(可以使用javadoc命令獲取文檔註釋生成幫助文檔)

在這裏插入圖片描述

標籤 描述 示例
在這裏插入圖片描述
在這裏插入圖片描述
@author 標識一個類的作者 @author description
@deprecated 指名一個過期的類或成員 @deprecated description
{@docRoot} 指明當前文檔根目錄的路徑 Directory Path
@exception 標誌一個類拋出的異常 @exception exception-name explanation
{@inheritDoc} 從直接父類繼承的註釋 Inherits a comment from the immediate surperclass.
{@link} 插入一個到另一個主題的鏈接 {@link name text}
{@linkplain} 插入一個到另一個主題的鏈接,但是該鏈接顯示純文本字體 Inserts an in-line link to another topic.
@param 說明一個方法的參數 @param parameter-name explanation
@return 說明返回值類型 @return explanation
@see 指定一個到另一個主題的鏈接 @see anchor
@serial 說明一個序列化屬性 @serial description
@serialData 說明通過writeObject( ) 和 writeExternal( )方法寫的數據 @serialData description
@serialField 說明一個ObjectStreamField組件 @serialField name type description
@since 標記當引入一個特定的變化時 @since release
@throws 和 @exception標籤一樣. The @throws tag has the same meaning as the @exception tag.
{@value} 顯示常量的值,該常量必須是static屬性。 Displays the value of a constant, which must be a static field.
@version 指定類的版本 @version info
  方法的調式:F5進入方法,F7由方法內部放回調用處

八.實現簡單綜合例子

package com.imooc.function;

import java.util.Scanner;

public class TotalDemo {
    //在末尾插入數據
    public int[] insertData(int[] arr){
        Scanner sc=new Scanner(System.in);
        for(int i=0;i<arr.length-1;i++){
        System.out.println("請輸入第"+(i+1)+"個整數:");
        arr[i]=sc.nextInt();
        }
        return arr;
        
    }
    //展示數據
    public void showData(int[] arr,int length){
        if(length<=arr.length){
        System.out.println("數組的前"+length+"個數爲:");    
        for(int i=0;i<length;i++){
            System.out.print(arr[i]+" ");
            
        }
        }
        else{
            System.out.println("數組長度越界了!");
        }
        System.out.println();
        }
    //在指定位置插入數據
    public int[] insertatArray(int[] arr,int n,int k){
        for(int i=arr.length-1;i>n;i--){
            arr[i]=arr[i-1];
        }
        arr[n]=k;
        return arr;
    }
    //查詢能被n整除的數
    public void div(int[] arr,int n){
        for(int i:arr){
            if(i%n==0){
                System.out.print(i+" ");
            }
        }
        System.out.println();
    }
    public void notice(){
        System.out.println("***************************");
        System.out.println("        1-插入數據 ");
        System.out.println("        2-顯示數據 ");
        System.out.println("        3-在指定位置插入數據 ");
        System.out.println("        4-查詢能被n整除數據 ");
        System.out.println("        0-退出");
        System.out.println("***************************");

        
    } 
    public static void main(String[] args) {
        // 實現增刪改查
        TotalDemo total=new TotalDemo();
        Scanner sc=new Scanner(System.in);
        int[] arr=new int[10];
        while(true){
            total.notice();
            int n=sc.nextInt();
            if(n==0){
                System.out.println("您退出了");
                break;
                
            }
            switch(n){
            case 1:{arr=total.insertData(arr);break;}
            case 2:total.showData(arr, arr.length);break;
            case 3:{
                System.out.println("請輸入插入的位置:");
                int n1=sc.nextInt();
                System.out.println("請輸入插入的值:");
                int k1=sc.nextInt();
                total.insertatArray(arr, n1, k1);
                break;}
            case 4:{
                System.out.println("請輸入被除數:");
                int n1=sc.nextInt();
                total.div(arr, n);
                break;
            }
            default:{
                System.out.println("輸入錯誤");break;
            }

            }
        }

    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章