• 牛客网刷题——java


    在这里插入图片描述

    个人主页:熬夜磕代码丶
    作品专栏: java se
    我变秃了,也变强了
    给大家介绍一款程序员必备刷题平台——牛客网
    点击注册一起刷题收获大厂offer吧
    在这里插入图片描述

    一、数列求和

    有数列为:9,99,999,…,9999999999。要求使用程序计算此数列的和,并在控制台输出结果。(请尝试使用循环的方式生成这个数列并同时在循环中求和)
    方法1:

     public static void main(String[] args) {
            //数列求和
            long sum = 0L;
            for (long i = 9; i <= 9999999999L; i=i*10+9) {
                sum+=i;
            }
            System.out.println(sum);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    方法2:

     public static void main(String[] args) {
            long[] arr = {9,99,999,9999,99999,999999,9999999,99999999,999999999,9999999999L};
            long sum = 0L;
            for (int i = 0; i < arr.length; i++) {
                sum += arr[i];
            }
            System.out.println(sum);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    二、二维数组求和

    给定一个二维数组,请你编写一个求和函数,计算出这个数组元素的和

     public static void main(String[] args) {
            int[][]  arr = {{11,33,55},{22,44,66,88},{131,214,315,146},{928,827,726,625},{424,525}};
            int sum=add(arr);
            System.out.println(sum);
        }
    
        public static int add(int[][] arr) {
            int sum=0;
            for(int i = 0;i < arr.length;i++) {
                for(int j = 0;j < arr[0].length;j++) {
                    sum += arr[i][j];
                }
            }
            return sum;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述
    我们可以发现这里出现了数组越界错误.
    在这里插入图片描述
    我们可以发现这里纵标限定的为arr[0]的长度,但这个二维数组的每个纵行的长度是不一样的,所以这样会出现数组越界错误。

     public static void main(String[] args) {
            int[][]  arr = {{11,33,55},{22,44,66,88},{131,214,315,146},{928,827,726,625},{424,525}};
            int sum=add(arr);
            System.out.println(sum);
        }
    
        public static int add(int[][] arr) {
            int sum=0;
            for(int i = 0;i < arr.length;i++) {
                for(int j = 0;j < arr[i].length;j++) {
                    sum += arr[i][j];
                }
            }
            return sum;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述
    我们再打印二维数组的时候,纵行的范围必须是每行的范围才可以.

    for (int[] arr1:arr) {
                for (int x:arr1) {
                    sum += x;
                }
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    或者利用foreach也可以.

    三、判断各类型字符个数

    输入一行字符串,分别统计出其中英文字母、空格、数字和其它字符的个数
    在这里插入图片描述

    public static void main(String[] args) {
            int numbers = 0;
            int words = 0;
            int space = 0;
            int other = 0;
            Scanner scanner = new Scanner(System.in);
            String str = scanner.nextLine();
            for (int i = 0; i < str.length(); i++) {
                if(Character.isLetter(str.charAt(i))) {
                    words++;
                }else if(Character.isDigit(str.charAt(i))) {
                    numbers++;
                }else if(Character.isWhitespace(str.charAt(i))) {
                    space++;
                }else {
                    other++;
                }
            }
            System.out.println("英文字母"+words+"数字"+numbers+"空格"+space+"其他"+other);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述

    四、定义打印方法

    已知有三个类:First、Second、Third。要求定义一个打印方法,支持传入任意引用类型的参数(包括上述三个类),并在方法内部打印出对象的字符串形式。

    public static void main(String[] args) throws Exception {
            Scanner scanner = new Scanner(System.in);
            while (scanner.hasNext()) {
                String className = scanner.next();
                // print就是需要你定义的方法
                print(Class.forName(className).newInstance());
            }
        }
        public static void print(Object obj) {
            System.out.println(obj.toString());
        }
    }
    
    class First {
        public String toString() {
            return "First";
        }
    }
    
    class Second {
        public String toString() {
            return "Second";
        }
    }
    
    class Third {
        public String toString() {
            return "Third";
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    多态性,是子类的对象赋给了父类的引用,使用的前提是有继承关系、有方法的重写
    本题中的三个类都重写了toString()方法
    那么很显然,需要找到一个类,是本题中三个类的共同父类,又有toString()方法
    并且有forName()方法和newInstance()方法,以便在第10行的print()中能传入一个对象
    不用想了,平时就是用 Object类,它是所有类的父类,又拥有各种各样的方法

    五、类型判断

    父类Base有两个子类:Sub1、Sub2,现有一个方法getClassName(),要求传入Base类型的实例,在方法内部判定其具体的类型,返回的是类型的简单名字(不含包名),请补全getClassName()方法的判断逻辑。
    输入描述:
    在这里插入图片描述
    在这里插入图片描述

     public static void main(String[] args) throws Exception {
            Scanner scanner = new Scanner(System.in);
            while (scanner.hasNext()) {
                String className = scanner.next();
                Base obj = (Base) Class.forName(className).newInstance();
                System.out.println(getClassName(obj));
            }
        }
    
        public static String getClassName(Base obj) {
    
            if(obj instanceof Sub1) {
                return "Sub1";
            }else if(obj instanceof Sub2) {
                return "Sub2";
            }else {
                return "Base";
            }
        }
    
    class Base {
    
    }
    
    class Sub1 extends Base {
    
    }
    
    class Sub2 extends Base {
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
  • 相关阅读:
    一文搞懂并查集
    Java实现负载均衡算法--轮询和加权轮询
    QGIS 导入文本数据(WKT)
    蓝桥每日一题(day2 暴力)扫雷 easy
    Microsoft.Extensions 简介
    JavaScript基础(5)_运算符
    DBeaver连接Oracle数据库,缺少数据驱动
    【Redis】
    远程访问及控制
    2023年数学建模国赛A 定日镜场的优化设计思路分析
  • 原文地址:https://blog.csdn.net/buhuisuanfa/article/details/126364427