java-Math类集合练习

前言

       写着题目的时候,我都吓蒙了,跟主题不相同啊,又比较烧脑,所以这次的题目我写了比较久,可能大概写了3个小时,其中在这10个题目中,有几道题目我认为是比较难的,但是有时候是我想得太复杂了,我只关注功能实现了,但是代码有些不够好,以后再来优化吧。

目录

题目1

  1. 反转键盘录入的字符串
  • 代码实现,效果如图所示:
    在这里插入图片描述
    代码如下:
public class Test01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String string = scanner.nextLine();
        System.out.println("录入的字符串:"+string);
        String string1 = reverString(string);
        System.out.println("反转的字符串:"+string1);
    }
    //就是把字符倒过来存放
    public static String reverString(String s){
        StringBuilder stringBuilder = new StringBuilder();

        for(int i =s.length() - 1;i >= 0;i--){
            stringBuilder.append(s.charAt(i));
        }
        return stringBuilder.toString();
    }
}

题目2

  1. 键盘录入QQ号码,验证格式的正确性。
  • 必须是5—12位数字。
  • 0不能开头。
  • 代码实现,效果如图所示:
    在这里插入图片描述

代码如下:

public class Test02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String qq = scanner.nextLine();
        System.out.println("这个QQ号码是否正确:"+isQq(qq));
    }

    public static boolean isQq(String s){
        boolean check = false;
        if(s.length() >= 5 && s.length() <= 12){
            if(s.startsWith("0")){
                return check;
            }else {
                check = true;
                return check;
            }
        }
        return  check;
    }
}

题目3

  1. 字符串查找。
  • 键盘录入一个大字符串,再录入一个小字符串。
  • 统计小字符串在大字符串中出现的次数。
  • 代码实现,效果如图所示:
    在这里插入图片描述

代码如下:

public class Test03 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入大写字符串: ");
        String upstring = scanner.nextLine();
        System.out.print("请输入小写字符串:");
        String  smallstring = scanner.nextLine();

        System.out.println("小字符串"+smallstring+",在大写字符串中共出现"+counttoa(smallstring,upstring)+"次");
    }

    public static int counttoa(String samll,String up){
        int count=0;
        char[] uptoarray = up.toCharArray();
        char[] smallarray = samll.toCharArray();
        int smalllength=smallarray.length;
        int uplength = up.length();
        int j = 0;
        for(int i = 0;i < uplength;i++){
            if(uptoarray[i] ==samll.charAt(0)){
                //通过定位
                j = i;
                //进行比较,是不是包含的子字符串
                for(int t = 0;t < smalllength;t++){
                    //只要有一个字符不是,立马结束,不用比了
                    if(uptoarray[j] !=smallarray[t]){
                        break;
                    }
                    //如果能比较到t等于smalllength的地步,则证明大字符包含小字符
                    if(t == smalllength -1){
                        count++;
                    }
                    j++;
                }
                //因为上面的for循环还要i++,所以这里减1,达到下标符合的位置
                i = j - 1;
            }
        }
        return count;
    }
}


题目4

  1. 替换某字符串中的某字符串。
  • 键盘录入一个srcStr字符串,再录入一个delStr字符串。
  • 删除该字srcStr符串中的所有delStr字符串。
  • 代码实现,部分效果如图所示:

在这里插入图片描述

代码如下:

public class Test04 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入源字符串: ");
        String srcStr = scanner.nextLine();
        System.out.println("请输入要删除的字符串:");
        String delStr = scanner.nextLine();
        String s = afterDel(srcStr, delStr);
        System.out.println("删除"+delStr+"后的字符串为:"+s);

    }

  
    public static String afterDel(String srcStr,String delStr){
        //把srcStr中的字符放到StringBuilder中,因为要涉及到删除操作,String就不太好
        StringBuilder afterdelstring = new StringBuilder();
        for(int i =0; i < srcStr.length();i++){
            afterdelstring.append(srcStr.charAt(i));
        }

        //存储delStrc出现的次数
        int count=0;
        int smalllength=delStr.length();
        int srcStrlength = srcStr.length();
        int j = 0;
        for(int i = 0;i < srcStrlength;i++){
            if(srcStr.charAt(i) ==delStr.charAt(0)){
                //通过定位
                j = i;
                //进行比较,是不是包含的子字符串
                for(int t = 0;t < smalllength;t++){
                    //只要有一个字符不是,立马结束,不用比了
                    if(srcStr.charAt(j) !=delStr.charAt(t)){
                        break;
                    }
                    //如果能比较到t等于smalllength的地步,则证明大字符包含小字符
                    if(t == smalllength -1){
                        count++;
                        if(count == 1) {
                            afterdelstring.delete(j - t, j + 1);
                        }
                        else {
                            //原srcStr是用来遍历的,而最终的操作结果是在afterdelstring进行的
                            //之所以是(count -1)是因为先统计次数,但是还没有把里面的字符删除
                            //(j-t-2*(count - 1)是开始删除的下标,(j-t-2*(count - 1)+2是要删除的结束的下标
                            afterdelstring.delete((j-t-2*(count - 1)),(j-t-2*(count - 1))+2);
                        }
                    }
                    j++;
                }
                //因为上面的for循环还要i++,所以这里减1,达到下标符合的位置
                i = j - 1;
            }
        }
        System.out.println("原字符串中总共包含"+count+"个"+delStr);
        return afterdelstring.toString();

    }
}

这里是可以用replace方法来做的,但是我不想用,所以自己写了比较多的代码

题目5

  1. 生成一个随机100内小数,转换为保留两位小数的字符串,不考虑四舍五入的问题。
  • 代码实现,效果如图所示:
    在这里插入图片描述

代码如下:

public class Test05 {
    public static void main(String[] args) {
        Random random = new Random();
        System.out.println("随机数为:");
        double v = random.nextDouble()*100;
        System.out.println(v);
        String result = v+"";
//        找出小数点的下标
        int i = result.indexOf(".");
//        把小数点后两位的其他小数全部删除
        String substring = result.substring(0,i + 3);
        System.out.println("转换为:"+substring);

    }


}

题目6

  1. 筛选字符串。
  • 定义ArrayList集合,存入多个字符串。

  • 长度大于5的字符串,打印删除后的集合。

  • 代码实现,效果如图所示:
    在这里插入图片描述

代码如下:

public class Test06 {
    public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList();
        arrayList.add("bca");
        arrayList.add("dadfa");
        arrayList.add("ddddaaaa");
        arrayList.add("你好啊");
        arrayList.add("我来啦,你干嘛呢");
        arrayList.add("别跑啊");

        System.out.println("原字符串:");
        System.out.println(arrayList);
        System.out.println("删除后: ");
        dellength(arrayList);
        System.out.println(arrayList);
    }

    public static  void dellength(ArrayList<String> arrayList){
        for(int i = 0;i < arrayList.size();i++){
            if(arrayList.get(i).length() > 5){
                arrayList.remove(i);
                //因为要减少一个,这个下标就不太准了,所以要手动调整
                i -- ;
            }
        }
    }
}

题目7

  1. 判断回文字符串。如果一个字符串,从前向后读和从后向前读,都是一个字符串,称为回文串,比如mom,dad,noon。
  • 代码实现,效果如图所示:
    在这里插入图片描述

代码如下:

public class Test07 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        boolean flag = checkIs(s);
        System.out.println(flag);
    }

    public static  boolean checkIs(String s){
        boolean result = true;
        int lastindex = s.length() - 1;
        for(int i = 0;i<s.length();i++){
            if(s.charAt(i) != s.charAt(lastindex)){
                return false;
            }
            lastindex--;
        }
        return result;
    }
}

题目8

  1. 模拟简单计算器,可以运算+,—,*,/,%。
  • 接收三个参数,一个整数,一个运算符,另一个整数。

  • 计算出运算结果。

  • 无法运算时,返回null。

  • 代码实现,效果如图所示:
    在这里插入图片描述

代码如下:

public class Test08 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int a = scanner.nextInt();
        String symbol = scanner.next();
        int  b = scanner.nextInt();
        System.out.println(a +"+"+b+"="+jisuan(a,symbol,b));

    }


    public static int jisuan(int a,String symbol,int b){
        int result = 0;
        switch (symbol){
            case "+":
                result= a+b;
                break;
            case "-":
                result = a - b;
                break;
            case "*":
                result = a * b;
                break;
            case "/":
                result = a / b;
                break;

            case "%":
                result = a % b;

        }
        return result;
    }
}

题目9

  1. 校验密码是否合法。
  • 必须至少8个字符。

  • 必须至少2个大写字符。

  • 必须只有字母和数字。

  • 代码实现,效果如图所示:
    在这里插入图片描述

代码如下:

public class Test09 {
    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//        String password = scanner.next();

        System.out.println(""+isCheck("qweRY123"));
    }

    public static boolean isCheck(String password){
        boolean flag = false;
        int upcount = 0;
        if(password.length() < 8) {
            return false;
        }
        for(int i = 0;i < password.length();i++){
            if(password.charAt(i) >= 'a' && password.charAt(i) <='z'
                    || password.charAt(i) >= 'A' && password.charAt(i) <= 'Z'
                    || password.charAt(i) >= '1' && password.charAt(i) <='9'){

                       if(password.charAt(i) >= 'A' && password.charAt(i) <= 'Z'){
                        upcount++;
                       }
            }else {
                return false;
            }
        }
        if(upcount >= 2){
            return true;
        }
        return  flag;
    }
}

题目10

  1. 模拟用户登录。
  • 定义用户类,属性为用户名和密码。

  • 使用集合存储多个用户对象。

  • 录入用户和密码,对比用户信息,匹配成功登录成功,否则登录失败。

  • 登录失败时,当用户名错误,提示没有该用户。

  • 登录失败时,当密码错误时,提示密码有误。

  • 代码实现,效果如图所示:
    在这里插入图片描述

代码如下:

public class User {
    private String name;
    private String password;

    public User() {
    }

    public User(String name, String password) {
        this.name = name;
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return Objects.equals(name, user.name) && Objects.equals(password, user.password);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, password);
    }

    public  void show(){
        System.out.println(getName()+"-"+getPassword());
    }
}
public class Test10 {
    static ArrayList<User> arrayList = new ArrayList();
    static {

        arrayList.add(new User("dage","123"));
        arrayList.add(new User("erge","1234"));
        arrayList.add(new User("sange","12345"));

        for(int i = 0;i < arrayList.size();i++ ){
            arrayList.get(i).show();
        }

    }
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        System.out.println("输入用户名:");
        String name = scanner.nextLine();
        System.out.println("输入密码: ");
        String password =scanner.nextLine();
        User user = new User(name, password);


        for(int i = 0;i < arrayList.size();i++){
            if(user.getName().equals(arrayList.get(i).getName())){
                if(user.getPassword().equals(arrayList.get(i).getPassword()) ){
                    System.out.println("登录成功");
                    break;
                }else {
                    System.out.println("登录结果:密码错误");
                   continue;
                }
            }else {

                System.out.println("登录结果:没有该用户");
                continue;
            }
        }
    }
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值