Java刷题训练第一期

Java刷题训练第一期

个人主页:手握风云

专栏:Java刷题训练营


1. 字符转ASCII码

问题描述:BoBo教KiKi字符常量或字符变量表示的字符在内存中以ASCII码形式存储。BoBo出了一个问题给KiKi,输入一个字符,输出该字符相应的ASCII码。

输入描述:一行,一个字符。

输出描述:一行,输出输入字符对应的ASCII码。

算法分析:在Java当中,没有针对字符的输入,只能使用针对字符串的输入,然后再使用charAt方法取第一个元素。然后通过强转将字符转化成整型。

代码如下:

```java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sca = new Scanner(System.in);
        char c = sca.nextLine().charAt(0);//取第一个元素
        int num = (int)c;
        System.out.println(num);
    }
}
```

2. 实现四舍五入

问题描述:将浮点数转换为整数类型,要求四舍五入。

输入描述:随机输入的浮点数

输出描述:四舍五入之后的整数

算法分析:这里要求输入一个浮点数,并且没规定正负,就需要考虑小数部分是正的还是负的。先输入一个浮点数,再强转成整型,相减得到小数部分去进行判断。

代码如下:

```java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner num = new Scanner(System.in);
        double d = num.nextDouble();
        int a = (int) d;//强转

        if(a >= 0) {
            if (d - a * 1.0 < 0.5) {
                //取小数部分,如果小于0.5,舍;
                System.out.println(a);
            } else {
                //如果大于0.5,入;
                System.out.println(a + 1);
            }
        } else{
            if (d - a * 1.0 < -0.5) {
                //取小数部分,如果小于-0.5,入;
                System.out.println(a-1);
            } else {
                //如果大于-0.5,舍;
                System.out.println(a);
            }
        }
    }
}
```

3. 字符菱形

问题描述:读入一个字符,然后在屏幕上显示一个用这个字符填充的对角线长5个字符,倾斜放置的菱形。

输入描述:输入一个char类型字符

输出描述:输出一个用这个字符填充的对角线长5个字符,倾斜放置的菱形

输出样例:

Java刷题训练第一期

算法分析:首先还是要将取字符串的第一个元素转成字符。因为形状已经给定了,所以直接输出就可以。但要注意一下第三行的输出,如果我们写成下面的代码,就会输出175。因为c是char类型,是ASCII字符, 能被解析, 字符串+号才算被当成加法运算。

```java
System.out.println(c+c+c+c+c);
```

代码如下:

```java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sca = new Scanner(System.in);
        char c = sca.nextLine().charAt(0);
        System.out.println(" "+" "+c+" "+" ");
        System.out.println(" "+c+c+c+" ");
        System.out.println(c+""+c+c+c+""+c);
        System.out.println(" "+c+c+c+" ");
        System.out.println(" "+" "+c+" "+" ");
    }
}
```

4. 大小写转化

问题描述:实现字母的大小写转换。多组输入输出。

输入描述:多组输入,每一行输入大写字母。

输出描述:针对每组输入输出对应的小写字母。

算法分析:先输入一个字符串,再用toLowerCase方法转成小写字母,再取第一个元素输出。

代码如下:

```java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sca = new Scanner(System.in);
        while(sca.hasNextLine()){
            String str1 = sca.nextLine();
            String str2 = str1.toLowerCase();
            char ch = str2.charAt(0);
            System.out.println(ch);
        }
    }
}

```

5. 开学?

问题描述:小S知道原计划星期X开学,通知开学时间延期N天,请问开学日期是星期几(星期日用7表示)?

输入描述:输入包含两个数字X,N(1≤X≤7, 1≤N≤1000)。

输出描述:输出一个数字,表示开学日期是星期几。

算法分析:让X+N对7进行取模运算。如果余数是1——6,直接输出;如果余数是0,则输出7。

代码如下:

```java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner num = new Scanner(System.in);
        int X = num.nextInt();
        int N = num.nextInt();
        int a = (X + N) % 7;
        if (a == 0) {
            System.out.println(7);
        } else {
            System.out.println(a);
        }
    }
}
```

6. 获得月份天数

描述:KiKi想获得某年某月有多少天,请帮他编程实现。输入年份和月份,计算这一年这个月有多少天。

输入描述:多组输入,一行有两个整数,分别表示年份和月份,用空格分隔。

输出描述:针对每组输入,输出为一行,一个整数,表示这一年这个月有多少天。

算法分析:我们先从月份上进行判断。我们先不管2月,1——7月,奇数月是31天,偶数月是30天;8——12月,奇数月是30天,偶数月是31天。接着判断输入的年份是否是闰年。

代码如下:

```java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner num = new Scanner(System.in);
        while (num.hasNextInt()) {
            int year = num.nextInt();
            int month = num.nextInt();
            if (month <= 7 && month != 2) {
                if (month % 2 == 1) {
                    System.out.println(31);
                } else if (month % 2 == 0) {
                    System.out.println(30);
                }
            } else if (month == 2) {
                if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
                    System.out.println(29);
                } else {
                    System.out.println(28);
                }
            } else {
                if (month % 2 == 0) {
                    System.out.println(31);
                } else {
                    System.out.println(30);
                }
            }
        }
    }
}
```

7. 小乐乐找最大数

问题描述:小乐乐获得4个最大数,请帮他编程找到最大的数。

输入描述:一行,4个整数,用空格分开。

输出描述:一行,一个整数,为输入的4个整数中最大的整数。

算法分析:首先用循环遍历数组,对4个元素进行输入;然后定义一个max变量,假设数组的第一个元素是最大值,遍历数组所有元素与max进行比较,找出最大值。

代码如下:

```java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int size = 4;//数组长度为4;
        Scanner num = new Scanner(System.in);
        int[] arrays = new int[size];
        for (int i = 0; i < size; i++) {
            arrays[i] = num.nextInt();//经过4次循环,输入4个数
        }
        int max = arrays[0];//先假设第一个元素是最大值
        for (int i = 0; i < arrays.length; i++) {
            if (arrays[i] > max) {
                max = arrays[i];
            }
        }
        System.out.println(max);
    }
}
```

8. 统计数据正负个数

问题描述:输入10个整数,分别统计输出正数、负数的个数。

输入描述:输入10个整数(范围-231~231-1),用空格分隔。

输出描述:两行,第一行正数个数,第二行负数个数。

算法分析:同上一题类似,也是需要遍历数组元素,找出所有的正数与负数,并自加统计个数。

代码如下:

```java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int size = 10;
        Scanner num = new Scanner(System.in);
        int[] arrays = new int[size];
        for (int i = 0; i < size; i++) {
            arrays[i] = num.nextInt();
        }
        int count1 = 0;
        int count2 = 0;
        for (int i = 0; i < arrays.length; i++) {
            if (arrays[i] > 0) {
                count1++;
            } else if (arrays[i] < 0) {
                count2++;
            }
        }
        System.out.println("positive:" + count1);
        System.out.println("negative:" + count2);
    }
}

```

9. 邮箱验证

问题描述:请根据给出的正则表达式来验证邮箱格式是否合法,如果用户输入的格式合法则输出「邮箱格式合法」,否则输出「邮箱格式不合法」。

输入描述:任意字符串

输出描述:根据输入的邮箱格式判断其合法于不合法,若输入字符串符合邮箱格式则输出邮箱格式合法,否则输出邮箱格式不合法

算法分析:本题需要有两个注意的点,一个是matches方法需要进行匹配,另一个就是正则表达式的写法,也是本题的难点。"[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+",这个正则表达式,修饰符+表示至少匹配其中的一个字符

Java刷题训练第一期代码如下:

```java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str1 = in.nextLine();
        String emailMatch = "[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+";
        if (str1.matches(emailMatch)) {
            System.out.println("邮箱格式合法");
        } else {
            System.out.println("邮箱格式不合法");
        }
    }
}
```

10. 求最小公倍数

问题描述:编写一个方法,该方法的返回值是两个不大于100的正整数的最小公倍数

输入描述:两个int类型变量作为方法的参数

输出描述:int类型的变量,值为两个数的最小公倍数

```java
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        int m = console.nextInt();
        int n = console.nextInt();
        int result = getCM(m, n);
        System.out.println(result);
    }

    public static int getCM(int m, int n){

        //write your code here......


    }
}
```

算法分析:方法的返回值是int,方法名称、参数都给了我们,所以就写成如下格式。求最小公倍数,一定小于等于两个数的乘积。利用for循环,找出能同时对两个数同时取模运算余数为0的数,然后返回。

```java
public static int getCM(int m, int n)
```

代码如下:

```java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        int m = console.nextInt();
        int n = console.nextInt();
        int result = getCM(m, n);
        System.out.println(result);
    }

    public static int getCM(int m, int n) {
        for (int i = 2; i < m * n ; i++) {
            if (i % m == 0 && i % n == 0) {
                return i;
            }
        }
        return m * n;
    }
}
```

如果上述问题,各位大佬有更高效的做法,欢迎评论区留言。

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/5693.html

(0)
LomuLomu
上一篇 2025 年 1 月 11 日 上午12:47
下一篇 2025 年 1 月 11 日 上午1:27

相关推荐

  • Effective Java中文版(原书第3版)PDF、EPUB免费下载

    Effective Java中文版(原书第3版)PDF、EPUB免费下载 适读人群 :本书并非面向Java初学者,而是要求读者有一定的Java编程经验。对于在Java开发方面已经积累一定经验的读者而言,本书可以帮助其更深入地理解Java编程语言,以成为更卓越、高效的Java开发人员。 Jolt获奖作品全新升级,与《Java编程思想》和《Java核心技术》齐名…

    2025 年 1 月 6 日
    23500
  • 架构师启示录:知识模型、落地方法与思维模式PDF、EPUB免费下载

    适读人群 :资深程序员、初级架构师 从架构知识模型、架构落地方法、架构思维模式三大维度介绍架构师的能力模型,带你穿越“认知迷雾” 电子版仅供预览,下载后24小时内务必删除,支持正版,喜欢的请购买正版书籍 点击原文去下载 书籍信息 作者: 灵犀出版社: 机械工业出版社出版年: 2024-3页数: 212装帧: 平装丛书: 架构师书库ISBN: 97871117…

    2025 年 1 月 6 日
    22800
  • 【GreatSQL优化器-10】find_best_ref

    【GreatSQL优化器-10】find_best_ref 一、find_best_ref介绍 GreatSQL的优化器对于join的表需要根据行数和cost来确定最后哪张表先执行哪张表后执行,这里面就涉及到预估满足条件的表数据,在keyuse_array数组有值的情况下,会用find_best_ref函数来通过索引进行cost和rows的估计,并且会找出最…

    2025 年 1 月 12 日
    29100
  • Discord技术架构调研(IM即时通讯技术架构分析)

    一、目标 调研 discord 的整体架构,发掘可为所用的设计思想 二、调研背景 Discord作为目前比较火的一个在线聊天和语音通信平台且具有丰富的功能。另外其 “超级”群 概念号称可支持百万级群聊 以及 永久保留用户聊天记录。探究其相关技术架构与技术实现 三、产品介绍 目前广泛使用的在线聊天和语音通信平台。最初于2015年发布,旨在为游戏社区提供一个交流…

    2025 年 1 月 10 日
    28400
  • Java 技术新纪元 —— 基于 Java 的联邦学习技术推动跨行业数据协同创新(238)

    🌟亲爱的技术爱好者们,诚挚欢迎访问【青云交的技术天地】!在这个数字化浪潮席卷全球的时代,我们相聚于此共同探索前沿科技。这里不仅是知识分享的平台,更是思想碰撞的舞台,期待与您携手共创技术新篇章!🌟全网平台(微信公众号/CSDN/抖音/华为/支付宝/微博):青云交一、加入【技术精英社群】快速加入通道1:【青云交技术精英圈】快速加入通道2:【CSDN 技术创作交流…

    2025 年 5 月 12 日
    6300

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信