编程语言
首页 > 编程语言> > java方法,冒泡排序,选择排序,插入排序,二分查找,打印正三角形及买彩票案例练习

java方法,冒泡排序,选择排序,插入排序,二分查找,打印正三角形及买彩票案例练习

作者:互联网

方法:
    方法(函数),复用性,可读性
方法格式:
    访问权限修饰符[其他的修饰符 如static]返回值类型 方法名
    public static void getmenu(){content;}
参数:
    实际参数:实际参与运算的
    形式参数:接受实际参数的
方法返回值和重载:
    return:结束方法
    返回值:由return带给调用者
    注意:
    1.若当前没有返回值类型,即返回值类型为void,方法中不写return
    2.return表示结束一个方法,也可以将返回值返回给调用者
    3.return返回值一次只能返回一个值,不可以返回多个值
    4.一个方法中可以有多个return,但只能被执行一次。
练习:
1.判断任意给定年份是否是闰年?

import java.util,Scanner;
public class Test{
    public static void main(String[] args){
    boolean bool = isleapyear(n);    //调用方法
    if(bool){
        System.out.println("闰年");
    }else{
        System.out.println("平年")
    }
    }
    public static boolean isleapyear(int year){
    if((year%4==0 && year%100!=0)||year%400==0){
        return ture;
    }else{
        return false;
    }
    }
}

2.根据传入的参数打印直角三角形
/*
import java.util.Scanner;
public calss Test{
    public static void main(String[] args){
    for(int i=1;i<=5;i++){
        for(int j=i;j<5;j++){
        System.out.print(" ");
        }
        for(int j=1;j<=i*2-1;j++){
        System.out.print("*");
        }
        system.out.println();
    }
    }
}
*/

import java.until.Scanner;
public class Test{
    public static void main(String[] args){
    Scanner input=new Scanner(System.in);
    int num = input.nextInt();
    pritnTriangle(num);
    }
    public static void printTriangle(int line){
    for(int i=1;i<=line;i++){
        for(int j=i;j<line;j++){
        System.out.print(" ");
        }
        for(int j=1;j<=i*2-1;j++){
        System.out.print("*");
        }
    Syetem.out.println();
    }
    }
}

方法的重载:overloading method
    在同一个类中,方法名相同,参数列表不同,返回值不能作为重载的条件。
    如:public void method(int a){...}
        public void method(char c){...}
JAVA数组的定义:
    数组:一组能够存储相同数据类型值得变量的集合
    创建数组:int[] nums = new int[50];
数组的赋值方式:
    1.使用默认的初始值来初始化数组中的每一个元素。eg:int[] scores = new int[3]
    2.先声明,然后再赋予默认的初始值。eg:int[] scores;scores = new int[3]
    3.先声明,然后再使用指定的值进行初始化。eg:int[]scores = new int[]{**.**.**};
    4.简化3.eg:int[]scores = [**.**.**]
数组的遍历:
    1.普通for循环
    for(int i=0;i<scores.length;i++){
        int score = scores[i];
        System.out.println(score);   //不能直接打印数组名
    }
    1+.使用增强for循环[foreach循环]
    for(数组中元素类型 变量:数组名){数组中元素类型 临时变量 = 变量}
    for(int x:scores){
        Syetem.out.println(x); 
    }
    2.可变参数                         /*重要,多注意*/
    可变参数只能是参数列表中的最后一个
    可变参数作为数组使用
    public static void print(int...x){
        int len = x.length;
        for(int i=0;i<len;i++){
        System.out.peintln(x[i]);
        }
    }
    print();
数组练习:
1.猜数字游戏demo:

    import java.util.Scanner;
    import java.util.Random;  //生成伪随机数
    public class test{
    int[] nums = new int[5];
    int len = nums.length;
    Randon r = new Random();  //创建一个可以生成随机数的工具
    for(int i=0;i<len;i++){
        r.nextint(50);            //随机生成50以内的数
    }
    //int[] nums = {30,20,10,12};  固定值
    Scanner input = new Scanner(System.in);
    System.out.println("please enter you guess num:");
    int userNum = input.nextInt();
    boolean flag = false;
    for(int x:nums){
        if(userNum == x){
        flag = true;
        break;
        }
    }
    if(flag){
        System.out.println("congratulation,yes");
    }else{
        System.out.println("error!,keep going on!");
    }
    }

2.打印正三角形
eg:
                       A
                     B B B
                   C C C C C
                 D D D D D D D
               E E E E E E E E E
             F F F F F F F F F F F
  G G G G G G G G G G G G G

    import java.util.Scanner;
    public class test{
    public static void main(String[] args){
        char[] cs = {'A','B','C','D','E','F','G'};
        //先输入空格,外循环控制行数,
        int len = cs.length;
        for(int i = 1;i <= len;i++){
        for(int j = i;j < len;j++){
            System.out.print(" ");
        }
        for(int j = 1;j <= i*2-1;j++){
            System.out.print(cs[i-1]);
        }
        System.out.println();
        }
    }
    }

3.有3个班级,每个班有3个同学,记录每个同学的成绩,并计算每个班的平均分。

    import java.util.Scanner;
    public class Test{
    public static void main(String[] args){
        int[][] scores= {{78,98,88},{87,96,85},{67,78,89}};
        //外循环控制行,内循环控制列
        int classLen = scores.length;
        for(int i = 0;i < classLen;i++){
        int sum = 0;
        int count = scores[i].length;
        for(int j = 0;j < count;j++){
            sum+=scores[i][j];
        }
        int avg = sum/count;
        System.out.println("no."+(i+1)+"class avg score"+avg);
        }
    }
    }

4.最大值和最小值

    public class test{
    public static void main(String[] args){
        int[] num = {12,13,45,56,87,55,156};
        int max = max(num);
        System.out.println("the max num in array:"+max);
        int min = min(num);
        System.out.println("the max num in array:"+min);
    }
    public static int max(int[] num){
        int max = num[0];
        int len = num.length;
        for(int i = 0;i < len,i++){
        if(num[i] > max){   
/*两个数交换位置方法*/ 
            num[i] = num[i]+max;
            max = num[i]-max;
            num[i] = num[i]-max;
        }
        }
        return max;
    }
    public static int min(int[] num){
        int min = num[0];
        int len = num.length;
        for(int i = 0;i < len,i++){
        if(num[i] < min){   
/*两个数交换位置方法*/ 
            num[i] = num[i]+min;
            min = num[i]-min;
            num[i] = num[i]-min;
        }
        }
        return min;
    }
    }

冒泡排序:

    /*稳定的排序算法*/
    import java.util.Scanner;
    public class Test{
    public static void main(String[] args){
        int[] nums = {12,13,45,75,93};
        int len = nums.length;
        //外循环控制轮数
        for(int i = 0;i < len-1;i++){
        for(int j = 0;j<len-1-i;j++){
            if(nums[j] > nums[j+1]){
            nums[j] = nums[j]+nums[j+1];
            nums[j+1] = nums[j]-nums[j+1];
            nums[j] = nums[j]-nums[j+1];
            }
        }
        }
        for(int n : nums){
        System.out.println(n);
        }
    }    
    }

选择排序算法:

    /*每一趟从待排序的数据元素中选出最大或最小的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完,是一种不稳定的排序算法。*/
    /*
    1.先确定一个最小值(一般选择第一个数),在逐个比较确定最大或最小值,但是最后才交换
    2.不稳定eg:5,4,5,2,6;会调换第一个5的位置
    */
    import java.util.Scanner;
    public class Test{
    public static void main(String[] args){
        int[] nums = {13,15,68,45,87,45};
        int minindex = 0;  //记录每次比较最小值的下标
        for(int i = 0;i < nums.length-1;i++){
        minindex = i;  //每轮先确定一个最小值下标
        for(int j = i+1;j < nums.length;j++){
            if(nums[minindex] > nums[j]){
            minindex = j;
            }
        }
        if(minindex != i){   //判断需要交换的数下标是否是自己
            nums[minindex] = nums[minindex+i];
            nums[i] = nums[minindex]-nums[i];
            nums[minindex] = nums[minindex]-nums[i]
        }
        }
        for(int n : nums){
        System.out.println(n);
        }
    }
    }

插入排序算法:

    /*
    从后向前找合适位置后插入:每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的子序列的合适位置,直到全部插入排序完为止。
    eg:插入扑克牌的方式,每拿一个数和前一个数比较,但是不是交换(记录小标),是设定一个临时变量,最后才交换
    */
    import java.util.Scanner;
    public class Test{
    public static void main(String[] args){
        int nums[] = [13,48,68,54,21,45];
        for(int i = 1;;i < nums.length;i++){
        int temp = nums[i];  //记录操作数
        int j = 0;
        for(j = i-1;j >= 0;j--){
            if(nums[j] > temp){
            nums[j+1] = nums[j];
            }else{
            break;
            }
        }
        if(nums[j+1] != temp){
            num[j+1] = temp;
        }
        }
        for(int n : nums){
        System.out.println(n);
        }
    }
    }

二分查找算法:  

/*必须保证数列有序*/
    import java.util.Scanner;
    public class Test{
    public static void main(String[] args){
        int nums[] = [13,48,68,75,85,98];
        int _pos = binayrSearch(nums,55);
        System.out.println(_pos);
    }
    public static int binarySearch(int[] num,int key){
        int left = 0;
        int right = nems.length-1;
        while(left <= right){
        int mid = (left + right)/2;
        if(nums[mid] > key){
            right = mid-1;
        }else if(nums[mid] < key){
            left = mid+1;
        }else{
            return  mid;
        }
        }
    return /*没找到*/ -1;
    }
    }

Arrays工具类:
    用来操作数组的方法,常用方法:
    import java.util.Arrays;
    1.使用二分查找:
        // Arrays.binarySearch(int[] array,int value);
        import java.util.Scanner;
        import java.util.Arrays;
            public class Test{
        public static void main(String[] args){
            int nums[13,48,68,54,21,45];
        int _pos = Arrays.binarySearch(nums,88);
        System.out.println(_pos);
            }
            }
    2.数组内容转成字符串的形式输出
        // Arrays.toString(intp[] array);
        for(int n : nums){
        System.out.println(n);
        // ==System.out.println(Arrays.toString(nums));
            /*
        public static String toString(long[] a){
            if(a == null)
            return "null";
            int iMax = a.length - 1;
            if(iMax == -1)
            return ="[]";
            StringBuilder b = new StirngBuilder();
            b.append(a[i]);
            for(int i = 0; ; i++){
            b.append(a[i]);
            if(i == iMax)
                return b.append(']').toString();
            b.append(", ");
            }
        }
        */
        }
    3.数组排序
        Arrays.sort(int[] array);
        //快速排序:
        Array.sort(nums); 
        System.out.println(Arrays.toString(nums));
    4.复制指定的数组
        // Arrays.copyOf(int[] array,int length/*新数组长度*/);
        // Arrays.copyOf(int[] array,int from,int to);
        // System.arraycopy(Object src,int srcPos,Object dest,int destPos,int length);
        int[] num = Array.copOf(num,10);
        System.out.println(Arrays.toString(num));
    5.判断两个数组的值是否相等
        // Arrays.equals(num,newNum);
    6.使用指定元素填充数组
        // Arrays.fill(num,value);
练习:双色球模拟综合案例:
    /*
    说明:投注区分为红球和蓝球区,红球01~33,蓝球01~16,双色球从33个红色球开出6个,从16个蓝球开出1个。
    分析:
    1.如何产生蓝球和红球?
        用户选择是机选还是手选
    2.如何接收用户选号?
        接收用户号码
        生成系统号码
    3.如何验证是否中奖?
        比较系统号码和用户号码,记录个数
        验证是否中奖
        系统号码排序
    4.公布本期中奖号码?
        公布结果
    实现步奏:
    1.整体实现思路
    2.随机取值不重复算法
    3.判断是否中奖的逻辑
    4.输出结果
    */

  import java.util.Scanner;
    import java.util.Arrays;
    import java.util.Random;
    public class Test{
    public static void main(String[] args){
        //定义相关的变量
        int[] userRedBall = new int[6];  //用户选择号码
        int[] sysRedBall = new int[6];   //系统生成号码
        int userBlueBall = 0;            //用户选择的蓝球
        int sysBlueBall = 0;             //系统生成蓝球
        int redCount = 0;                //记录用户选择正确的红球
        int blueCount = 0;               //记录用户选择正确的蓝球
        int[] redBall = new int[33];     //用于存储1~33的红球号码
        //需要随机生成6个在1~33之间不重复的数算法
        for(int i=0;i<redBall.length;i++){
        redBall[i] = i+1;
        }
        //游戏开始
        System.out.println("let's start!");
        System.out.ptintln("by computer 1 or by self 2??");
        Scanner input = new Scanner(System.in);
        Random r = new Random();
        boolean flag = true;          //判断输入是否正确
        while(flag){
        int isAuto = input.nextInt();
        switch(isAuto){
            case 1:
            computerSelect(redBall,userRedBall);   //机选红球
            userBlueBall = r.nextInt(16)+1;        //机选蓝球
            flag = false;
            break;
            case 2:
            System.out.printIn("please enter 6 redball no in 1~33:");
            for(int i=0;i<userRedBall.length;i++){
                userRedBall[i] = input.nextInt();
            }
            System.out.println("please select a blue no in 1~16:");
            userBlueBall = input.nextInt();
            flag = false;
            break;
            default:
             System.out.ptintln("by computer 1 or by self 2??");
            break;
        }
        }
        //系统随机生成号码
            //红球
        computerSelect(redBall,sysRedBall);
            //蓝球
        systemBlueBall = r.nextInt(16)+1;
        //统计结果:
        //统计红球
        for(int i=0;i<userRedBall.length;i++){
        for(int j=0;j<sysRedBall.length-redCount;j++){
            if(userRedBall[i]==sysRedBall[j]){
            int temp = sysRedBall[j];
            sysRedBall[j] = systemRedBall[sysRedBall.length-1-redCount];
            systemRedBall[sysRedBall.length-1-redCount] = temp;
            redCount++;
            break;
            }
        }
        }
        //统计蓝球
        if(userBlueBall==sysBlueBall){
        blueCount = 1;
        }
        //验证是否中奖
        if(blueCount==0 && redCount<=3){
        System.out.println("miss award.");
        }else if(blueCount==1 && redCount<3){
        System.out.println("yes,you win $5!");
        }else if((blueCount==1 && redCount==3) || (blueCount==0 && redCount==4)){
        System.out.peintln("yes,you win $10!");
        }else if((blueCount==1 && redCount==4) || (blueCount==0 && redCount==5)){
        System.out.println("yes,you win $200!");
        }else if(blueCount==1 && redCount==5){
        System.out.println("yes,you win $3000!");
        }else if(blueCount==0 && redCount==6){
        System.out.println("yes,you win $1500000!");
        }else if(blueCount==1 && redCount==6){
        System.out.println("yes,you win $5000000!");
        }else{
        System.out.println("System Error!")
        }
        //公布系统号码
        System.out.println("the redBall no in range:");
        sort(sysRedBall);
        System.out.println(Array.toString(sysRedBall));
        System.out.println("the blueBall no in range:"+sysBlueBall);
        //公布用户号码
        System.out.println("the redBall selected by you:");
        sort(userRedBall);
        System.out.println(Array.toString(userBlueBall));
        System.out.println("the blueBall selected by tou:"+userBlueBall);
        //end
        System.out.println("thanks for you buying the event!")
    }
    //冒泡排序
    public static void sort(int[] ball){
        for(int i=0;i<ball.length-1;i++){
        for(int j=0;j<ball.length-1-i;j++){
            if(ball[j]>ball[j+1]){
            ball[j] = ball[j]+ball[j+1];
            ball[j+1] = ball[j]-ball[j+1];
            ball[j] = ball[j]-ball[j+1];
            }
        }
        }
    }
    //在指定数列中,随机生成多个不重复的数算法
    public static void computerSelect(int[] redBall,int[] userredBall){
        Random r = new Random();
        int index = -1;
        for(int i=0;i<userRedBall.length;i++){
        index = r.nextInt(redBall.length-i);
        userRedBall[i] = redBall[index];
        
        int temp = redBall[index];
        redBall[index] = redBall[redBall.length-1-i];
        redBall[redaBall.length-1-i] = temp;
        }
    }
    }

 

标签:java,nums,int,System,冒泡排序,正三角形,num,static,public
来源: https://blog.csdn.net/xy294636185/article/details/101419966