java05数组和方法

  1. 数组
    选择排序:

    • 从0下标开始,依次和后面每个元素比较,小的往前放,第一次完毕,最小值出现在了最小下标处

      案例:

//1.用选择排序将数组中的最小值选出
public static void main(String[] args) {
     int[] ary = {12,4,54,7,3,8,35,88};
     //用一次选择排序,将最小值放到下标0处
     for(int i=1;i<ary.length;i++){
         //两个数的交换
         if(ary[i]<ary[0]){
             int tmp = ary[0];
             ary[0] = ary[i];
             ary[i] = tmp;
         }
     }

     System.out.println(Arrays.toString(ary));
}

2.对一个数组进行升序排列

public static void main(String[] args) {
     int[] ary = {12,4,54,7,3,8,35,88};
     //i:被比较数的下标
     for(int i=0;i<ary.length-1;i++){
         //实现将此为的最小值排出
         //j:比较数的下标
         for(int j=i+1;j<ary.length;j++){
             //实现比较
             if(ary[i]>ary[j]){
                 int tmp = ary[i];
                 ary[i] = ary[j];
                 ary[j] = tmp;
             }
         }
     }
System.out.println(Arrays.toString(ary));

3.Arrays.sort():
Sort():如果数组的元素类型是基本数据类型:那么这个sort方法底层采用的是经过优化的快速排序算法,如果数组的元素类型是引用类型,此时sort方法底层采用的算法是优化的合并排序算法。–(了解性内容,不要求掌握)

2.方法
各种语言都有方法的概念(有的语言称其为函数或过程)
方法用于封装一段特定的逻辑功能
方法可以在程序中反复被调用;
方法可减少代码重复,便于程序的维护。

方法:将一段具有特定功能的代码进行封装,以便可以多次调用,提高了代码的复用率

1.方法的定义:5部分

修饰符,返回值类型,方法名,参数列表,方法体
修饰符:访问控制修饰符

  1. 方法名:命名规则:驼峰命名法
    a) 首字母小写的
  2. 返回值:
    写一个方法,方法体如果最后要将一个结果返回,此时就说方法有返回值,那么返回值类型位置必须放一个数组类型(和返回的结果的类型保持一致)
    –return 表达式/变量/数值;

如果一个方法没有返回值,此时返回值类型位置写void

  1. 参数列表:
    a) 方法名(参数列表)
    参数列表:可以是0个,可以是1个,还可以是多个

形参:在定义方法的时候参数列表位置定义出的变量
实参:在调用方法的时候必须传递的具体的值
5局部变量的生命周期
如果一个变量定义在一个方法的内部,那么这个变量就叫做局部变量,作用范围紧邻它的一堆{}

局部变量的生命周期:
随着方法体中变量的定义而产生,直到方法结束,局部变量从内存销毁

Public void getMaxValue(){
int a = 3;
int b = 13;
int sum = a+b;
int product = a*b;
…..

}

Public void getMaxValue(int a,int b){
//a b 是局部变量
…..

}

6成员变量:
在java中,如果一个变量定义在方法的外部,类的内部,那么这个变量就叫做成员变量。

比较:
局部变量在使用之前必须进行初始化、、

 成员变量会被默认初始化
    int ax ; 
    默认初始化的值和类型有关:
      整数数值  0
      浮点类型  0.0
      Boolean  false
      Char    \u0000    0
      引用类型:   null

7可变参数:

语法:
数据类型…变量名
int…is

    可变参数:个数可变的参数

注意点:
1. 如果参数列表有多个参数,那么可变参数一定是位于参数列表的最后,参数列表中最多只能有一个可变参数
a) test(int a,int…is) //正确的
b) test(int…is,int a) //错误的
2.底层采用的数组
3.如果方法的参数是可变参数,那么传递的实参可以是一个数组

     可变参数的访问
  1. 案例:
  2. 用户输入两个数字,对两个数字求和
    public static void main(String[] args) {
    //用户从控制台输入两个整数
    Scanner sc = new Scanner(System.in);
    System.out.println(“请输入两个整数,用空格隔开”);
    int a = sc.nextInt();
    int b = sc.nextInt();

    //对输入的ab求和
    int sum = sum(a,b);
    System.out.println(a+”+”+b+”=”+sum);

    sc.close();
    }
    public static int sum(int x,int y){
    //对x y求和
    return x+y;
    }

  3. 用户输入两个数字,求出最大值
    public static void main(String[] args) {
    //用户输入两个整数
    Scanner sc = new Scanner(System.in);
    System.out.println(“请输入两个整数,用空格隔开”);
    int a = sc.nextInt();
    int b = sc.nextInt();

    //找出二者中的最大值
    int max = getMaxValue(a,b);
    System.out.println(a+”和”+b+”中的最大值是:”+max);
    sc.close();
    }

public static int getMaxValue(int a, int b) {
//方法体:找出二者中的最大值
return a>b?a:b;
}

3.猜字母游戏
其游戏规则为:程序随机产生5个按照一定顺序排列的字符作为猜测的结果(不重复),由玩家来猜测此字符串。玩家可以猜测多次,每猜测一次,则由系统提示结果。如果猜测的完全正确,则游戏结束,计算玩家的游戏得分并输出(每次字符100分,猜错一次扣10分);如果没有猜对,则提示猜测的结果,如猜对了几个字符,以及猜对了几个字符的位置等信息,并提示玩家游戏继续。 — EXIT,退出程序
/*
* 猜字母游戏
*/

public class GuessLettersGame {
    public static void main(String[] args) {
        int score = 0,count=0;

        System.out.println("欢迎进入猜字母游戏:");
        char[] dest = generate();
        System.out.println(Arrays.toString(dest));

        Scanner sc = new Scanner(System.in);
        //用户输入字符串
        while(true){
            String input = sc.next().toUpperCase();
            //对输入的内容进行判断
            if("EXIT".equals(input)){
                System.out.println("退出程序");
                break;
            }


            //将输入的字符串转换为字符数组
            char[] inputArray = input.toCharArray();

            //判断输入的字符数组的长度是否为5
            if(inputArray.length!=5){
                System.out.println("输入的字符个数必须为5!");
                count++;
                continue;
            }

            //检查
            int[] result = check(inputArray,dest);

            if(result[1]==dest.length){
                score = 100*dest.length-10*count;
                //全都猜对了
                System.out.println("恭喜你,猜对了,得分是:"+score
                );
                break;
            }else{
                System.out.println("猜对的字符个数是:"
            +result[0]+",其中位置正确的字符个数是:"+result[1]);
                count++;
            }
        }

        sc.close();

    }

    //随机生成长度为5的字符数组
    public static char[] generate(){
        char[] letters = {'A','B','C','D','E','F','G',
                'H','I'};  //9个字符
        char[] chs = new char[5];

        boolean[] flag = new boolean[9];
        //为chs中的每个元素随机生成
        for(int i=0;i<chs.length;i++){
            int index;
            do{
                index = (int)(Math.random()*9);
            }while(flag[index]);
            chs[i] = letters[index];
            //flag[index] = true;
        }
        return chs;
    }

    //检查用户输入的字符数组是否和生成的内容匹配
    public static int[] check(char[] inputArray,char[] dest){
        //inputArray和dest比较
        //i:inputArray中的下标

        int[] result = new int[2];
        for(int i=0;i<inputArray.length;i++){
            //和dest中的每个值进行比较
            for(int j=0;j<dest.length;j++){
                if(inputArray[i]==dest[j]){
                    //输入的字符中一个猜对了
                    result[0]++; //result[0] :猜对的字符个数
                    //位置匹配判断
                    if(i==j){
                        //位置正确
                        result[1]++;   //result[1]:位置正确的字符个数
                    }
                    break;
                }
            }
        }
        return result;
    }  

String 字符串本质是字符数组
abcde

整体脉络:

1. genarate() – 生成标准的字符数组 A-Z 5个不重复字符
2. 用户输入字符串— 循环 do..while while(true)
a) 将输入的字符串转换为大写
i. String.toUpperCase();
b) 对输入的字符串进行是否为exit判断
i. String .equals(String) - boolean – 判断字符串内容是否相同
3. Check(char[] input,char[] standard) – 对用户输入的字符串和标准字符数组进行比较
4. 根据check的结果判断出是猜对了,还是猜错了

总结:
方法:
定义:5部分
修饰符 返回值类型 方法名(参数列表){
方法体
}

返回值类型:
return 表达式/变量/值;
方法如果没有返回值,那么写void

参数列表:方法名(参数列表)
可以放0个参数,也可以放多个

   形参,实参

   方法的参数列表位置的参数其实是局部变量


成员变量:可以只声明,java会对其进行默认初始化,初始化的值和数据类型有关系
局部变量:局部变量的生命周期

   可变参数:数据类型…变量名;
       注意点:

1. 如果参数列表中有可变参数,那么可变参数一定位于列表的最后
2. 本质其实是数组 — 可变参数的访问方式和数组一样
3. 因为可变参数底层是用数组保存数据的,所以在调用某个有可变参数的方法时,可以传递一个数组

5.作业
为猜字母游戏添加等级。等级设为三个等级:5,7,9,代表所需要猜测的字母个数。游戏开始时,由玩家选择游戏等级(5,7,9).如果选择7,则会随机产生7个字符,然后玩家输入一个字符串包含7个字符,看这7个字符和随机产生的7个字符比较,是否正确,并统计分数。另外,如果输入其他,重新提示输入游戏等级。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值