Java程序逻辑控制的几个小练习(熟悉一下Java的语法)

虽然都是一些很简单的题目,但是都是很经典的编程题,多写几道可以熟悉一些Java代码,

之前C语言敲多了一时半会有点不适应,敲起来怪怪的,感觉手不是自己的了哈哈


目录

1. 根据年龄, 来打印出当前年龄的人是少年(低于18), 青年(19-28), 中年(29-55), 老年(56以上)

2.判定一个数字是否是素数

 3. 打印 1 - 100 之间所有的素数

 4. 输出 1000 - 2000 之间所有的闰年

5. 输出乘法口诀表 (n由用户输入)

 6. 求两个正整数的最大公约数

7. 求出0~999之间的所有“水仙花数”并输出。

 8. 写一个函数返回参数二进制中 1 的个数

 9. 数字9 出现的次数         * 编写程序数一下 1到 100 的所有整数中出现多少个数字9,以及包含 9的数字有几个

 10.猜数字游戏

11.计算分数的值  - 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值 

 12.打印x图形

如图

13.  模拟登陆 - 编写代码模拟三次密码输入的场景。


1. 根据年龄, 来打印出当前年龄的人是少年(低于18), 青年(19-28), 中年(29-55), 老年(56以上)

    public static void main1(String[] args) {


        /**
         * 1. 根据年龄, 来打印出当前年龄的人是少年(低于18), 青年(19-28), 中年(29-55), 老年(56以上)
         */
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入年龄:");
        while(scanner.hasNextInt()){
            int age = scanner.nextInt();
            if(age >= 0 && age <= 18){
                System.out.println("少年");
            } else if (age >= 19 && age <= 28) {
                System.out.println("青年");
            } else if (age >= 29 && age <= 55) {
                System.out.println("中年");
            } else{
                System.out.println("老年");
            }
            System.out.println("请输入年龄:");
        }
    }

2.判定一个数字是否是素数

涉及到一个Math.sqrt(isPrime)数学方法,求平方根,缩小遍历的范围

    public static void main2(String[] args) {

        /**
         * 2. 判定一个数字是否是素数
         */
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNextInt()){
            int isPrime = scanner.nextInt();
            int i = 2;
            for (i = 2; i <= Math.sqrt(isPrime); i++) {
                if(isPrime % i ==0){
                    break;//让isPrime这个数,依次除2-isPrime(优化后范围Math.sqrt(isPrime))之间的数,直到能整除时跳出循环
                }
            }
            //判断能被整除的这个数i,是否为isPrime本身。是,则为素数,否则,不是素数
            if (i > Math.sqrt(isPrime)) {
                System.out.println("是素数");
            }else {
                System.out.println("不是素数");
            }
        }
    }

 3. 打印 1 - 100 之间所有的素数

在上一题的基础上,打印出来

public static void main3(String[] args) {

        /**
         *  3. 打印 1 - 100 之间所有的素数
         */
        for (int isPrime = 1; isPrime <= 100; isPrime++) {
            int i = 2;
            for (i = 2; i <= Math.sqrt(isPrime); i++) {
                if(isPrime % i ==0){
                    break;//让isPrime这个数,依次除2-isPrime之间的数(优化范围Math.sqrt(isPrime)),直到能整除时跳出循环
                }
            }
            //判断能被整除的这个数i,是否为isPrime本身。是,则为素数,否则,不是素数
            if (i > Math.sqrt(isPrime)) {
                System.out.println(isPrime);
            }
        }
    }

 

 4. 输出 1000 - 2000 之间所有的闰年

 public static void main4(String[] args) {

        /**
         * 4. 输出 1000 - 2000 之间所有的闰年
         */
        for (int i = 1000; i <= 2000; i++) {
            if((i % 4 == 0 && i % 100 != 0)||(i % 400 == 0)){
                System.out.println(i);
            }
        }
    }

5. 输出乘法口诀表 (n由用户输入)

 public static void main5(String[] args) {

        /**
         * 5. 输出乘法口诀表
         */
//        for (int i = 1; i <= 9; i++) {
//            for (int j = 1; j <= i ; j++) {
//                System.out.printf("%d*%d=%d ",i,j,i*j);
//            }
//            System.out.println();
//        }

        /**
         * 输出n*n的乘法口诀表,n由用户输入
         */
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i ; j++) {
                System.out.printf("%d*%d=%d ",j,i,i*j);
            }
            System.out.println();
        }
    }

 6. 求两个正整数的最大公约数

    public static void main6(String[] args) {
        /**
         * 6. 求两个正整数的最大公约数
         */
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNextInt()) {
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            int c = a % b;

            while (c != 0) {
                a = b;
                b = c;
                c = a % b;
            }
            System.out.println(b);
        }
    }

7. 求出0~999之间的所有“水仙花数”并输出。

    public static void main7(String[] args) {
        /**
         * 7. 求出0~999之间的所有“水仙花数”并输出。(“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数
         * * 本身,如: 153=1^3+5^3+3^3 ,则153是一个“水仙花数”。)
         */
        for (int i = 0; i < 100000; i++) {
            //求出该数是几位数
            int num = i;
            int count = 0;
            while(num != 0){
                count++;
                num /= 10;
            }
            //求出每个数字的每一位的三次方 ,计算总和
            int sum = 0;
            num = i;
            while(num != 0){
                sum += Math.pow ((num % 10),count);
                num /= 10;
            }
            //判断是否相等
            if(i == sum){
                System.out.println(i);
            }
        }
    }

 8. 写一个函数返回参数二进制中 1 的个数

    public static void main8(String[] args) {
        /**
         * 8. 写一个函数返回参数二进制中 1 的个数
         * * 比如: 15 0000 1111 4 个 1
         */
        Scanner scanner =new Scanner(System.in);
        while(scanner.hasNextInt()){
            int num = scanner.nextInt();
            int count =0;
            //方法1:用右移运算符
//            for (int i = 0; i < 32; i++) {
//                if (((num >> i) & 1) == 1) {
//                    count++;
//                }
//            }

            //方法2:num &= (num - 1)
            //每&一次,num的二进制位中都会少个1,直到num=0
            //用count计数&的次数就知道有多少个1了
            while(num != 0){
                count++;
                num &= (num - 1);
            }
            System.out.println(count);
        }

    }

 9. 数字9 出现的次数
         * 编写程序数一下 1到 100 的所有整数中出现多少个数字9,以及包含 9的数字有几个

    public static void main10(String[] args) {
        /**
         * 数字9 出现的次数
         * 编写程序数一下 1到 100 的所有整数中出现多少个数字9,以及包含 9的数字有几个
         * 20个数字9,包含9的数字有19个
         */
        //自己写的方法(求包含0的数字):不局限于几位数
//        int count = 0;
//        for (int i = 1; i <= 100; i++) {
//            int n = i;
//            //把每个数的每一位求出来,如果是9,count++
//            while(n != 0){
//                if(n % 10 == 9){
//                    //System.out.println(i);
//                    count++;
//                    break;
//                }
//                n /= 10;
//            }
//        }
//        System.out.println(count);

        //方法2:针对百位数
        Scanner scanner =  new Scanner(System.in);
        int n = scanner.nextInt();
        int count = 0;
        for (int i = 1; i <= n; i++) {
            if(i / 10 == 9){
                count++;
            } else if (i % 10 == 9) {//这里的elseif条件换成 if就是(多少个数字9)的答案了
                count++;
            }
        }
        System.out.println(count);
    }

 10.猜数字游戏

public static void main(String[] args) {
        /**
         *  猜数字游戏
         *
         */
        Random random = new Random();//不写Random()参数时,默认随机种子为系统时间(时间戳)
        Scanner scanner = new Scanner(System.in);

        int randNum = random.nextInt(100);//生成随机数用randNum储存,设置参数区间100,表示[0-100)
        System.out.println("请猜数字:");
        while(scanner.hasNextInt()){
            int guess = scanner.nextInt();
            if(guess == randNum) {
                System.out.println("猜对了");
                break;
            }else if(guess < randNum){
                System.out.println("猜小了");
            }else{
                System.out.println("猜大了");
            }
        }


    }

11.计算分数的值  - 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值 

    public static void main11(String[] args) {
        /**
         * 计算分数的值
         * 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值    。
         */
        double sum = 0.0;
        int flg = 1;
        for (int i = 1; i <= 100; i++) {
            sum += flg*(1.0/i);
            flg *= -1;//flg = -flg 这样也可以
        }
        System.out.println(sum);
    }

 12.打印x图形

如图

Java程序逻辑控制的几个小练习(熟悉一下Java的语法)_第1张图片

 

public static void main12(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int a = in.nextInt();

            for(int i = 0;i < a;i++){
                for(int j = 0;j < a;j++){
                    if(i == j || i + j == a-1){
                        System.out.print("*");
                    }
                    else{
                        System.out.print(" ");
                    }
                }
                System.out.println();
            }
        }
    }

13.  模拟登陆 - 编写代码模拟三次密码输入的场景。

 * 最多能输入三次密码,密码正确,提示“登录成功”,密码错误,可以重新输入,最多输入三次。
 * 三次均错,则提示退出程序
这里用到了psw.equals(password)方法,判断两个字符串是否一致

    public static void main9(String[] args) {
        /**
         * 模拟登陆
         * 编写代码模拟三次密码输入的场景。
         * 最多能输入三次密码,密码正确,提示“登录成功”,密码错误,可以重新输入,最多输入三次。
         * 三次均错,则提示退出程序
         */
        Scanner scanner = new Scanner(System.in);
        String password = "ABcd";
        int i = 0;
        for (i = 0; i < 3; i++) {
            System.out.println("请输入密码:");
            String psw = scanner.nextLine(); //输入密码
            if(psw.equals(password)){
                System.out.println("登录成功");
                break;
            } else if (i==2) {
                System.out.println("三次均错,退出程序");
            }
        }
    }

你可能感兴趣的:(Java,java,开发语言)