Java入门必刷的基础题1(八道)

简介: Java入门必刷的基础题1(八道)



下面的源码大多只有方法体,需要自己补全类之后才能用

1. 第一题

(1)题目

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

(2)本题思路

  • 这里使用的:是Java当中的,从键盘输入数据的方式,固定格式。其中age是变量的名字,scanner是工具包的名字。
import java.util.Scanner;//导入的包
 Scanner scanner = new Scanner(System.in);//工具
        int age = scanner.nextInt();//从键盘输入年龄
  • 这题一看,就是多分支结构,并且每个选项是有范围的,所以想到if的多分支结构
if(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("老年");
        }

(3)完整代码

import java.util.Scanner;//导入的包
public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);//工具
        int age = scanner.nextInt();//从键盘输入年龄
        if(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("老年");
        }
 scanner.close();//关闭工具
    }
}

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

(1)了解素数

素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

(2)思路

  • 代码判断素数的写法:ret就是需要判断是否为素数,只需要拿i=2到i=根号ret来判断即可(一种方法)
boolean tmp = true;
 while(i<=Math.sqrt(ret)) {
            if(ret%i==0) {
                System.out.println(ret+"不是素数");
                tmp = false;
                break;
            }
            i++;
        }
  • 导致循环结束的两种条件:不是素数提前跳出;是素数循环结束。所以需要拿一个值去标记一下:tmp
  • 如果值没有被修改,那就是素数,并打印
if(tmp) {
           System.out.println(ret+"是素数");
       }

(3)完整代码

import java.util.Scanner;//导入的包
public class Test {
 public static void main(String[] args) {//判断素数
        Scanner scanner = new Scanner(System.in);
        int ret = scanner.nextInt();
        int i=2;
        boolean tmp = true;
        while(i<=Math.sqrt(ret)) {
            if(ret%i==0) {
                System.out.println(ret+"不是素数");
                tmp = false;
                break;
            }
            i++;
        }
       if(tmp) {
           System.out.println(ret+"是素数");
       }
        scanner.close();//关闭工具
    }
}

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

(1)思路

本体是在第二题的基础上改造,也就是在外层套上一个循环即可,用来输出1-100的数字;要注意ret++的操作

(2)完整代码

public static void main(String[] args) {//判断素数
       int ret = 2;
       while(ret<=100) {
           int j=2;
           boolean tmp = true;
           while(j<=Math.sqrt(ret)) {
               if(ret%j==0) {
                   tmp = false;
                   break;
               }
               j++;
           }
           if(tmp) {
               System.out.println(ret+"是素数");
           }
           ret++;
       }

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

(1)判断闰年的方法

闰年有两种:

  • 普通闰年:公历年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)。
  • 世纪闰年:公历年份是整百数的,必须是400的倍数才是闰年(如1900年不是闰年,2000年是闰年)。

所以代码写法:只需要将判断条件写在一起即可

if(year%400==0||(year%100!=0&&year%4==0)) {
                System.out.println(year);
            }

(2)完整代码

public static void main6(String[] args) {
        //输出1000-2000之间的闰年
        int year = 1000;
        while(year<=2000) {
            if(year%400==0||(year%100!=0&&year%4==0)) {
                System.out.println(year);
            }
            year++;
        }
    }

5. 输出乘法口诀表

(1)了解乘法口诀表

这就是乘法口诀表的性质和特点,里面的表格就需要我们去考虑了。

(2)思路

  • 我们可以发现,这可以想象成一个“二维数组”,肯定就是需要两个for循环来输出的。细节在于第二个循环:j<=i;
for(i=1;i<=9;i++) {
            int j=1;
            for(j=1;j<=i;j++) {
                System.out.print(i+"*"+"="+(i*j)+" ");
            }
            System.out.println();
        }
  • 打印格式:分别需要输出i,j,i*j还有空格,第二层循环结束再换行
System.out.print(i+"*"+"="+(i*j)+" ");

(3)完整代码

public static void main(String[] args) {
        //输出九九口诀表
        int i=1;
        for(i=1;i<=9;i++) {
            int j=1;
            for(j=1;j<=i;j++) {
                System.out.print(i+"*"+"="+(i*j)+" ");
            }
            System.out.println();
        }
    }

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

(1)介绍最大公约数

概念:公约数是可以同时整除两个数,公约数最大的那个就是最大公约数,如:4是12与16的最大公约数,12/4==0且16/4==0,比4大的就不能整除他们俩

特点:一定<=他们之间最小的

(2)常规方法

  • 找最小值
int a = 12;
        int b = 16;
        int min=a>b?b:a;//找最小值
  • 找最大公约数:从最小值开始往下找 ,满足条件即是最大公约数
while(min>=1) {
            if(a%min==0&&b%min==0) {
                break;
            }
            min--;
        }
  • 完整代码
public static void main(String[] args) {
       //求最大公因数
        int a = 12;
        int b = 16;
        int min=a>b?b:a;//找最小值
        while(min>=1) {
            if(a%min==0&&b%min==0) {
                break;
            }
            min--;
        }
        System.out.println("最大公约数是:"+min);
    }

(3)辗转相除法

  • 了解辗转相除法的做法(具体原理是什么我也不是很清楚)

用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。

  • 辗转的过程

  • 完整代码
public static void main(String[] args) {
       //求最大公因数
        int a = 12;
        int b = 16;
        int c = a%b;
        while(c!=0) {
            a = b;
            b = c;
            c = a%b;
        }
        System.out.println("最大公约数:"+b);
    }

7. 求二进制中 1 的个数

(1)了解题目要求

如:7,二进制为00000111(只展示8位),1的位数共有3,所以需要求出3

(2)常规方法

思路:

  • 符号按位与(&),对应位上都是1结果为1,其他为0。所以可以使用和1按位与,可以确定最低位是否为1
  • 按位与一次只能得到最低位,所以配合无符号右移符号(>>>)可以完成每一位的检查。
  • 选择无符号右移的原因:右移之和左边会补符号号,负数的话则会补1
if(((a>>>i)&1)==1) {
               sum++;
           }

完整代码:

public static void main(String[] args) {
        //求二进制中1的个数
       int a = -1;
       int sum = 0;
       int i = 0;
       for(i=0;i<32;i++) {
           if(((a>>>i)&1)==1) {
               sum++;
           }
       }
       System.out.println(sum);
    }

(3)快速法

原理(举例说明):

完整代码:

public static void main(String[] args) {
        //求二进制中1的个数
        int n = 7;
        int i = 0;
        while(n!=0) {
            n=n&(n-1);
            i++;
        }
        System.out.println(i);
    }

8.分别输出二进制中的奇数位和偶数位

(1)题目意思

如:7的二进制为:00000000 00000000 00000000 00000111

奇数位(标红的数字):10101010 111010101010101 01000111

偶数位(标黑的数字):10101010 111010101010101 01000111

(2)思路

  • 同样让最低位与1进行按位与操作,原数是0则是0,1则是1
  • 每次需要右移两位(跳过奇数位或者偶数位)
  • 分两个循环分别输出奇数位跟偶数位

 (3)完整代码

public static void main(String[] args) {
        int n = 7;
        int i=0;
        //获取奇数位
        System.out.print("奇数位:");
        for(i=30;i>=0;i-=2) {
            System.out.print(((n>>>i)&1)+" ");
        }
        System.out.println();
        System.out.print("偶数位:");
        for(i=31;i>=1;i-=2) {
            System.out.print(((n>>>i)&1)+" ");
        }
    }

本节完…………………………………………


相关文章
|
26天前
|
存储 Oracle Java
java零基础学习者入门课程
本课程为Java零基础入门教程,涵盖环境搭建、变量、运算符、条件循环、数组及面向对象基础,每讲配示例代码与实践建议,助你循序渐进掌握核心知识,轻松迈入Java编程世界。
222 0
|
2月前
|
Java
java入门代码示例
本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
369 0
|
3月前
|
安全 Java 数据库连接
2025 年最新 Java 学习路线图含实操指南助你高效入门 Java 编程掌握核心技能
2025年最新Java学习路线图,涵盖基础环境搭建、核心特性(如密封类、虚拟线程)、模块化开发、响应式编程、主流框架(Spring Boot 3、Spring Security 6)、数据库操作(JPA + Hibernate 6)及微服务实战,助你掌握企业级开发技能。
522 3
|
5月前
|
Java API 微服务
2025 年 Java 从入门到精通学习笔记全新版
《Java学习笔记:从入门到精通(2025更新版)》是一本全面覆盖Java开发核心技能的指南,适合零基础到高级开发者。内容包括Java基础(如开发环境配置、核心语法增强)、面向对象编程(密封类、接口增强)、进阶技术(虚拟线程、结构化并发、向量API)、实用类库与框架(HTTP客户端、Spring Boot)、微服务与云原生(容器化、Kubernetes)、响应式编程(Reactor、WebFlux)、函数式编程(Stream API)、测试技术(JUnit 5、Mockito)、数据持久化(JPA、R2DBC)以及实战项目(Todo应用)。
324 5
|
2月前
|
前端开发 Java 数据库连接
帮助新手快速上手的 JAVA 学习路线最详细版涵盖从入门到进阶的 JAVA 学习路线
本Java学习路线涵盖从基础语法、面向对象、异常处理到高级框架、微服务、JVM调优等内容,适合新手入门到进阶,助力掌握企业级开发技能,快速成为合格Java开发者。
462 4
|
3月前
|
NoSQL Java 关系型数据库
Java 从入门到进阶完整学习路线图规划与实战开发最佳实践指南
本文为Java开发者提供从入门到进阶的完整学习路线图,涵盖基础语法、面向对象、数据结构与算法、并发编程、JVM调优、主流框架(如Spring Boot)、数据库操作(MySQL、Redis)、微服务架构及云原生开发等内容,并结合实战案例与最佳实践,助力高效掌握Java核心技术。
376 0
|
3月前
|
Java 测试技术 API
Java IO流(二):文件操作与NIO入门
本文详解Java NIO与传统IO的区别与优势,涵盖Path、Files类、Channel、Buffer、Selector等核心概念,深入讲解文件操作、目录遍历、NIO实战及性能优化技巧,适合处理大文件与高并发场景,助力高效IO编程与面试准备。
|
3月前
|
Java 编译器 API
Java Lambda表达式与函数式编程入门
Lambda表达式是Java 8引入的重要特性,简化了函数式编程的实现方式。它通过简洁的语法替代传统的匿名内部类,使代码更清晰、易读。本文深入讲解Lambda表达式的基本语法、函数式接口、方法引用等核心概念,并结合集合操作、线程处理、事件回调等实战案例,帮助开发者掌握现代Java编程技巧。同时,还解析了面试中高频出现的相关问题,助你深入理解其原理与应用场景。
|
2月前
|
Java API 数据库
2025 年最新 Java 实操学习路线,从入门到高级应用详细指南
2025年Java最新实操学习路线,涵盖从环境搭建到微服务、容器化部署的全流程实战内容,助你掌握Java 21核心特性、Spring Boot 3.2开发、云原生与微服务架构,提升企业级项目开发能力,适合从入门到高级应用的学习需求。
561 0
|
3月前
|
前端开发 Java 数据库
Java 项目实战从入门到精通 :Java Web 在线商城项目开发指南
本文介绍了一个基于Java Web的在线商城项目,涵盖技术方案与应用实例。项目采用Spring、Spring MVC和MyBatis框架,结合MySQL数据库,实现商品展示、购物车、用户注册登录等核心功能。通过Spring Boot快速搭建项目结构,使用JPA进行数据持久化,并通过Thymeleaf模板展示页面。项目结构清晰,适合Java Web初学者学习与拓展。
286 1