1. 程式人生 > 其它 >Java學習——方法

Java學習——方法

一、方法

 當編寫程式進行計算時,經常會需要執行一段重複的程式碼,這時可以編寫方法傳入引數進行對方法的呼叫。

 方法定義的語法:

public static 資料型別  方法名 (引數型別 引數名){}

 

 方法的作用:

  1.提高程式碼的複用性。

  2.便於程式的維護。

 方法分為四種 : 無參無返回值、無參有返回值、有參無返回值、有參有返回值。

 1.無參無返回值

  示例程式碼如下:

public static void print1(){
    System.out.println("今天依舊是開心的一天!");
}

  其中 : void 表示返回值為空 即該方法沒有返回值 因為()中沒有資料 所以該方法沒有引數

 2.無參有返回值

  示例程式碼如下:

public static int print2(){
    int a=1;
    return a;
}

  方法是否需要定義返回值 取決於方法呼叫之後,方法的結果在呼叫它的程式是否需要使用。

 3.有參無返回值

  示例程式碼如下:

public static void print3(int n){
    n=n/2;
    System.out.println(n);
}

 4.有參有返回值

  示例程式碼如下:

public static int sum(int n){
    int sum=0;
    for
(int i=1;i<n;i++){ sum+=i; } //return 返回方法計算的值 可以結束方法的程序 return sum; }

二、遞迴

 遞迴是一種迭代運算,其實現方式是呼叫方法時在方法內部繼續呼叫該方法直至條件滿足,呼叫才結束。

 示例程式碼如下:

//求和的遞迴
public static int sum(int n){            
    if(n>1){
        return n+sum(n-1);
    }else {
        return n;
    }
}

 遞迴的缺點:

  1.記憶體消耗較大。

  2.效率較低。

  3.可能造成方法棧大溢位。

三、方法的應用例項—雙色球

  示例程式碼如下:

package com.hnnlg1;
​
import java.util.Random;
import java.util.Scanner;
​
public class test {
​
    public static void main(String[] args) {
        Random random = new Random();
        //選手  6+1  6個紅球 1個籃球
        //中獎號碼  6+1  6個紅球 1個籃球
int [] redBalls =new int[33];  //紅球陣列  1~33 紅球
int [] userRedBalls = new int[6];  //使用者的紅球和中獎的紅球
        int [] luckyRedBalls= new int[6];
​
        int userBlueBall =0;   //使用者籃球、中獎的籃球
        int luckyBlueBall =0;
​
        //確定中獎的紅球和藍球
        init(redBalls);   //初始化紅球陣列
        selectRedBall(redBalls,luckyRedBalls);      //選6個紅球作為中獎的紅球號碼
        System.out.println("紅球的中獎號碼為:");    //列印輸出中獎的紅球號碼
        for(int i=0;i<6;i++)
            System.out.print(luckyRedBalls[i]+"\t");
​
        luckyBlueBall = random.nextInt(6)+1;            //選藍球作為中獎的籃球號碼
        System.out.println("\n藍球的中獎號碼為:"+luckyBlueBall+"\n");
        //列印輸出中獎的藍球號碼
​
​
        //判斷使用者選擇的方式  機選  手選
        Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入遊戲方式:1.機選 2.手選");
        int type = scanner.nextInt();
        scanner.nextLine();
​
        if(type==1){    //機選
            selectRedBall(redBalls,userRedBalls);     //選6個紅球作為使用者的紅球號碼
            System.out.print("使用者的紅球號碼為:   "); //列印輸出使用者的紅球號碼
            for(int i=0;i<6;i++)
                System.out.print(userRedBalls[i]+"\t");
            userBlueBall=random.nextInt(6)+1;               
            //選1個籃球作為使用者的藍球號碼
            System.out.println("\n使用者的藍球號碼為:  "+userBlueBall);
            //列印輸出使用者的藍球號碼
​
        }else if(type==2){  //手選
​
            System.out.println("請輸入你所選的紅球號碼 (注意不要重複選):");
            //紀錄使用者所選的紅球號碼
            for(int i=0;i<6;i++)
            {
                System.out.println("第"+(i+1)+"個紅球號碼:");
                userRedBalls[i]=scanner.nextInt();
                scanner.nextLine();
            }
​
            System.out.print("使用者的紅球號碼為:   ");     //列印輸出使用者的紅球號碼
            for(int i=0;i<6;i++)
                System.out.print(userRedBalls[i]+"\t");
​
            System.out.println("\n請輸入你所選的藍球號碼:");//紀錄使用者所選的藍球號碼
            userBlueBall = scanner.nextInt();
​
            System.out.println("\n使用者的藍球號碼為:  "+userBlueBall);
            //列印輸出使用者的藍球號碼
​
        }else {
            System.out.println("未知指令,請重新輸入!");
        }
​
        //開獎
        int sums=0;  //記錄中獎的紅球的個數
        int flag=0;  //記錄中獎的藍球的個數
for (int i= 0;i<userRedBalls.length;i++){
            for (int j =0;j<luckyRedBalls.length;j++)
            {
                if(userRedBalls[i]==luckyRedBalls[j]){  
                //使用者的紅球和中獎的紅球一致時,中獎的紅球的個數加一
                    sums++;
                }
            }
        }
        if(userBlueBall==luckyBlueBall) flag++;
​
        System.out.println("\n中獎的紅球個數為:"+sums);
        System.out.println("中獎的藍球個數為:"+flag);
​
    }
​
​
    public static void init(int[] arry){  //球的初始化
        for (int i=0;i<arry.length;i++){
            arry[i]=i+1;
        }
    }
​
    //從33個紅球中隨機選6個不重複的紅球號碼
    public static void selectRedBall(int [] redBalls,int []luckyRedBalls){
        int temp;
        Random random = new Random();
        //產生的隨機數作為紅球陣列的下標[0,32]
        for(int i=0;i<6;i++){
            int index = random.nextInt(redBalls.length-i);
            luckyRedBalls[i]=redBalls[index];
            //選中的球和最後一個球進行交換
            temp=redBalls[redBalls.length-1-i];
            redBalls[redBalls.length-1-i]=redBalls[index];
            redBalls[index]=temp;
        }
    }
​
}