<训练营>初学Java-Java基础知识-增强for循环-方法day05

本文介绍了Java中的增强for循环,强调其编程便利性与限制。接着详细讲解了方法的定义、调用及参数列表,提供了一个扑克牌案例。还探讨了标识符的规则和命名建议,并展示了如何从字符串中获取特定字符。最后,提供了一个案例,通过交换相邻中文字符顺序来调整文字顺序。

1增强for循环

是传统遍历的简写,编译时候还原传统循环

语法:

for(元素类型 变量: 数组){
    使用变量遍历数组元素
}

好处就是编程方便

缺点:没有循环变量i,没有序号,无法替代使用了i的算法

代码:

public class Demo01 {
    public static void main(String[] args) {
        /**
         * 增强for循环
         */
        String[] names = {"Tom","Jack","Last","Lao"};
        for (String name : names){
            System.out.print(name+" ");
        }
    }
}

控制台展示:

 

2方法

方法:也成为函数\过程,将一个可以重复用的计算过程封装起来,方便重复使用

  • 封装方法
  • 调用方法:重复使用语法

定义方法语法:

修饰词 返回值类型 方法名称 (参数列表){
    方法体
}

调用方法:

返回值 = 方法名称(参数);
  •  修饰词:用于声明方法的可见范围
  • 方法名称:方法的标识,用于区别不同的方法
  • 参数列表:方法计算时候传入的参数
  • 返回值:方法的计算结果
    • 如果方法声明的返回值类型,则在方法中必须使用return语句返回一个值
    • 如果方法没有返回值,则使用void声明返回值类型
  • 方法体:方法的计算过程

列子:

public static double area(double r){
    //计算圆的面积
    return Math.PI * r * r; 
}

 流程(图解):

代码:

public class Demo02 {
    public static void main(String[] args) {
        /**
         * 演示方法
         */
        //计算半径为8的园面积
        double d1 = area(8);
        System.out.println(d1);
        //计算半径为14的园面积
        double d2 = area(14);
        System.out.println(d2);
        //报个错
        double d3 = area(-44);
        System.out.println(d2);
    }

    /**
     * 计算园面积的方法
     * @param radius
     * @return
     */
    private static double area(double radius) {
        if (radius < 0 ){
            //throw 抛
            //Illegal 非法
            //Argument 参数
            //Exception 列外
            throw new IllegalArgumentException("不能是负数");
        }
        //计算园面积
        return Math.PI * radius * radius;
    }
}

控制台展示: 

2.1利用方法重新构建扑克牌案例

import javax.crypto.spec.PSource;
import java.util.Random;

public class Demo06 {
    public static void main(String[] args) {
        /**
         * 扑克牌
         * 扑克牌中一共有54个元素'
         * 按照长度初始化元素;
         */
        //定义一个String类型的数组用来存储54张扑克牌
        String[] cards = newCards();
        //调用创建扑克牌的方法


        System.out.println("正常牌的顺序:");
        //查看所有扑克牌是否存起来了
        printAll(cards);

        //洗牌(打乱牌)
        shuffle(cards);

        System.out.println("将牌打乱以后的顺序");
        //测试扑克牌打乱顺序了吗
        printAll(cards);
        //定义三个String类型的数组,用来代表三个人
        String[] laoLiu = new String[17];
        String[] liSi = new String[17];
        String[] wangWu = new String[17];
        //定义一个String类型的数组存储底牌
        String[] bases = new String[3];
        //调用发牌的方法
        deal(cards,laoLiu,liSi,wangWu);

        //循环遍历他们三个的牌
        System.out.println("老刘的牌:");
        print(laoLiu);
        System.out.println("李四的牌:");
        print(liSi);
        System.out.println("王五的牌");
        print(wangWu);
        System.out.println("底牌:");
        //获取底牌的方法
        bases(cards,bases);
        //输出底牌
        print(bases);

    }//main方法结束

    /**
     * 查看玩家的扑克牌
     * @param cards
     */
    public static void print(String[] cards){
        for (String card : cards){
            System.out.print(card+" ");
        }
        System.out.println();
    }

    /**
     * 查看所有扑克牌的方法
     * @param cards
     */
    public static void printAll(String[] cards){
        for (int i = 0; i < cards.length; i++) {
            System.out.print(cards[i]+" ");
            if ((i+1) % 13 == 0) {
                System.out.println();
            }
        }
        System.out.println();
    }

    /**
     * 洗牌的方法
     * @param cards
     * @return
     */
    public static String[] shuffle(String[] cards){
        //洗牌(打乱牌)
        Random random = new Random();
        for (int i = cards.length ; i > 0 ; i--){
            //获取一个随机数范围是从0~i的随机数
            //i每次循环减去1用来控制随机数的范围
            int index = random.nextInt(i);
            //拿到这个随机数进行位置交换
            String temp = cards[i-1];
            cards[i-1] = cards[index];
            cards[index] = temp;
        }
        return cards;
    }

    /**
     * 创建一个新的扑克牌
     * @return
     */
    public static String[] newCards(){
        String[] cards = new String[54];
        //给cards数组的最后两位赋值为大王,小王
        cards[53] = "大🃏";
        cards[52] = "小🃏";
        //定义一个数组用来存储A,2,3,4 ... K
        String[] rank = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};

        int length = 0;
        String[] RedBlack = {"♥","♦","♠","♣"};
        for (int i = 0; i < RedBlack.length; i++) {
            for (int j = 0; j < rank.length; j++) {
                cards[length] = RedBlack[i]+rank[j];
                length++;
            }
        }
        return cards;
    }

    /**
     * 发牌的方法
     * @param cards
     * @param player1
     * @param player2
     * @param player3
     */
    public static void deal(String[] cards,
                            String[] player1,
                            String[] player2,
                            String[] player3){
        //定义一个int类型的变量用来控制发牌的顺序
        int num = 0;
        for (int i = 0; i < 51; i+= 3) {
            //老刘拿第i张牌
            player1[num] = cards[i];
            //李四拿第i+1张牌
            player2[num] = cards[i+1];
            //王五拿第i+1+1张牌
            player3[num] = cards[i + 1 + 1];
            //循环完毕让i+=3条过他们拿的这几张牌
            num++;
        }
    }

    /**
     * 获取底牌
     * @param cards
     * @param bases
     */
    public static void bases(String[] cards,String[] bases){
        for (int i = 0 ; i < bases.length; i++) {
            bases[i] = cards[cards.length-1-i];
        }
    }
}

控制台效果展示:

 

2.2标识符

是Java中变量,方法,类名等的识别符

  • 不能以数组为开头,可以是字母_$
  • 第二个字符开始,可以是数字,字符
  • 不能使用运算符
  • 字符范围是Unicode,包含中文、英文,等文字

建议:

  • 建议使用英文作为标识符:(使用中文着,容易被打死)
  • 采用驼峰命名法:第一个单词首字母小写,后续每个单词首字母大写
    • getProductName
    • javaScore
  • 建议使用长变量名,见名知意
  • goDead  去死
  • duang  碰撞检查
  • moveDown 向下移动

2.3字符串API

2.3.1获取字符串中的一个字符

字符串内部封装了一个字符数组,其字符有序号,从0开始

//char[]      {今天天气不错}
String str =  "今天天气不错";
//             0 1 2 3 4 5

可以从字符串中获取指定位置的字符

charAt(位置) 

2.4案例

调整文字顺序不影响阅读

思路:

  • 将相邻的两个中文子交换顺序
  • 符号不参与交换,跳过
  • 将处理结果存储到一个字符数组中
String str = "上海昨日新增死亡病例52例,平均年龄83.1岁,最小年龄33岁";

思路(图解): 

 

代码展示:

import java.util.Scanner;

public class Demo05 {
    public static void main(String[] args) {
        /**
         * 调整文字顺序不影响阅读
         */
        Scanner sc = new Scanner(System.in);
        System.out.println("请您输入一句话:");
        String str = sc.nextLine();
        char[] characters = new char[str.length()];
        exchange(str, characters);
        for (char character : characters){
            System.out.print(character);
        }
    }

    private static void exchange(String str, char[] characters) {
        for (int i = 0; i < str.length(); i+=2) {
            if (i+1 > str.length()-1){
                characters[i] = str.charAt(i);
            }else if((str.charAt(i) >= '\u4E00' && str.charAt(i) <= '\u9FA5')
                        &&
                     (str.charAt(i+1) >= '\u4E00' && str.charAt(i+1) <= '\u9FA5')){
                characters[i] = str.charAt(i + 1);
                characters[i + 1] = str.charAt(i);
            }else{
                characters[i] = str.charAt(i);
                characters[i + 1] = str.charAt(i + 1);
            }
        }
    }
}

控制台展示: 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值