首页 > 编程语言 >Java基础练习题(二)

Java基础练习题(二)

时间:2023-08-22 22:32:11浏览次数:29  
标签:练习题 case Java 基础 System days break println out

第1题:1-100偶数

1、打印1-100之间的偶数

public class Exercise1 {
    public static void main(String[] args) {
        for (int i = 2; i <=100 ; i+=2) {
            System.out.println(i);
        }
    }
}

第2题:水仙花数

2、所谓水仙花数是指一个3位数,其各个位上数字立方和等于其本身。例如: 153 = 1*1*1 + 5*5*5 + 3*3*3,找出所有的水仙花数,并统计他们有几个。

public class Exercise2 {
    public static void main(String[] args) {
        System.out.println("水仙花数有:");
        int count = 0;
        for (int i=100; i<1000; i++){
            int bai = i/100;
            int shi = i/10%10; // 或 i%100/10
            int ge = i%10;

            //判断这个三位数是否是水仙花数,如果是,统计变量++
            if((ge*ge*ge+shi*shi*shi+bai*bai*bai) == i) {
                System.out.println(i);
                count++;
            }
        }
        System.out.println("一共有" + count +"个");
    }
}

第3题:foobizbaz

3、从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出“foo”,在每个5的倍数行上打印“biz”,在每个7的倍数行上打印输出“baz”。例如:

Java基础练习题(二)_整除

public class Exercise3 {
    public static void main(String[] args){
        //从1循环到150
        for(int i=1; i<=150; i++){
            //在每行打印一个i的值
            //System.out.println(i);//输出i之后,立刻换行
            System.out.print(i);//只打印i的值

            //每个3的倍数行上打印出“foo”
            if(i%3==0){
                //System.out.println("foo");//输出foo后立刻换行
                System.out.print("\tfoo");//这里加\t是为了好看
            }

            //在每个5的倍数行上打印“biz”
            if(i%5==0){
                System.out.print("\tbiz");
            }

            //在每个7的倍数行上打印输出“baz”
            if(i%7==0){
                System.out.print("\tbaz");
            }

            //最后把这一行的事全部完成后,再换行
            //System.out.print("\n");
            System.out.println();//只打印换行
        }
    }
}

第4题:最大公约数和最小公倍数

4、输入两个正整数m和n,求其最大公约数和最小公倍数

import java.util.Scanner;

public class Exercise4 {
    public static void main(String[] args) {
        //输入两个正整数m和n
        Scanner input = new Scanner(System.in);

        int m;
        while(true){
            System.out.print("请输入第一个正整数m的值:");
            m = input.nextInt();
            if(m<=0){
                System.out.println(m + "不是正整数,请重写输入!");
            }else{
                break;
            }
        }
        int n;
        while(true){
            System.out.print("请输入第一个正整数n的值:");
            n = input.nextInt();
            if(n<=0){
                System.out.println(n + "不是正整数,请重写输入!");
            }else{
                break;
            }
        }
        System.out.println("两个正整数:" + m + "," + n);
        input.close();

        //求m和n的最大公约数和最小公倍数
		/*
		1、概念
		公约数:能够把m和n都整除,就是它俩的公约数
		例如:6和9,公约数:1,3
		      9和18,公约数:1,3,9
			  5和13,公约数:1
		公倍数:能够被m和n都整除的,就是它俩的公倍数
		例如:6和9,公倍数:18,36....
			   9和18,公倍数:18,36...
			    5和13,公倍数:65,....

		2、如何找最大公约数
		例如:6和9
			从6开始,9%6==0?  6%6==0?
					 9%5==0?   6%5==0?
					 9%4==0?   6%4==0?
					 9%3==0?   6%3==0?    binggou找到了  结束查找
		例如:9和18
			从9开始	  9%9==0?  18%9==0?   binggou找到了  结束查找
		例如:5和13
			从5开始   5%5==?  13%5==0?
					  5%4==?  13%4==0?
					  5%3==?  13%3==0?
					  5%2==?  13%2==0?
					  5%1==?  13%1==0?   binggou找到了  结束查找
					其实只要找到5的平方根就可以了
		*/

        //第一步:找出m和n中最大值和最小值
        int max = m>=n ? m : n;
        int min = m<n ? m : n;

        //第二步:从小的开始查找
        int maxYue = min;
        while (maxYue >= 1){
            if(m % maxYue==0 && n%maxYue==0){
                break;
            }
            maxYue--;
        }
        System.out.println(maxYue +"是" + m + "和" + n + "的最大公约数");
        //最小公倍数 = m*n / 最大公约数
        //System.out.println(m*n/maxYue +"是" + m + "和" + n + "的最小公倍数");

        //如果不知道这个公式,从max开始找,一直找到m*n
        int maxBei = max;
        while(maxBei <= m*n){
            if(maxBei % m ==0 && maxBei % n ==0){
                break;
            }
            maxBei ++ ;
        }
        System.out.println(maxBei +"是" + m + "和" + n + "的最小公倍数");
    }
}

第5题:ATM

5、声明变量balance并初始化为0,用以表示银行账户的月,下面通过ATM机程序实现存款,取款等功能。

---------ATM-------
	1、存款
	2、取款
	3、显示余额
	4、退出
请选择:
import java.util.Scanner;

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

        //声明一个变量表示余额
        double balance = 0.0;
        boolean flag = true;
        int select;
        do{
            System.out.println("=========ATM========");
            System.out.println("\t1、存款");
            System.out.println("\t2、取款");
            System.out.println("\t3、显示余额");
            System.out.println("\t4、退出");
            System.out.print("请选择:");
            select = input.nextInt();

            switch(select){
                case 1:
                    System.out.print("存款的金额:");
                    double money = input.nextDouble();
                    balance += money;
                    break;
                case 2:
                    System.out.print("取款的金额:");
                    money = input.nextDouble();

                    if ((balance-money)<=0){
                        System.out.println("取款失败!余额不足");
                    }else {
                        balance -= money;
                    }
                    break;
                case 3:
                    System.out.println("现在的余额:" + balance);
                    break;
            }
        }while(select != 4);

        input.close();
    }
}

第6题:九九乘法表

Java基础练习题(二)_流程控制_02

public class Exercise6 {
    public static void main(String[] args) {
        for(int i =1;i<=9;i++){
            for(int j=1;j<=i;j++){
                System.out.print(j+"*"+i+"="+(i*j) + "\t");
            }
            System.out.println();
        }
    }
}

第7题:菱形

Java基础练习题(二)_流程控制_03

public class Exercise7 {
    public static void main(String[] args){
        //上半部分:正的等腰三角形
        //5行
        for(int i=1; i<=5; i++){
            //(1)打印空格
			/*
			当i=1,打印4个空格,j=4,3,2,1	j>=i
			当i=2,打印3个空格,j=4,3,2
			当i=3,打印2个空格,j=4,3
			当i=4,打印1个空格,j=4
			当i=5,打印0个空格,j=4,让循环条件一次都不满足
			*/
            for(int j=4; j>=i; j--){
                System.out.print("  ");
            }
            //(2)打印*
			/*
			当i=1,打印1个,j=1					j<=2*i-1
			当i=2,打印3个,j=1,2,3,
			当i=3,打印5个,j=1,2,3,4,5
			当i=4,打印7个,j=1,2,3,4,5,6,7
			当i=5,打印9个,j=1,2,3,4,5,6,7,8,9
			*/
            for(int j=1; j<=2*i-1; j++){
                System.out.print("*");
            }
            //(3)换行
            System.out.println();
        }


        //下半部分:倒立的等腰三角形
        //4行
        for(int i=1; i<=4; i++){
            //(1)打印空格
			/*
			当i=1,1个空格,j=1		j<=i
			当i=2,2个空格,j=1,2
			当i=3,3个空格,j=1,2,3
			当i=4,4个空格,j=1,2,3,4
			*/
            for(int j=1; j<=i; j++){
                System.out.print("  ");
            }
            //(2)打印*
			/*
			当i=1,7个*,j=1,2,3,4,5,6,7  j<=9-2*i;
			当i=2,5个*,j=1,2,3,4,5
			当i=3,3个*,j=1,2,3
			当i=4,1个*,j=1
			*/
            for(int j=1; j<=9-2*i; j++){
                System.out.print("*");
            }
            //(3)换行
            System.out.println();
        }
    }
}

第8题:完数

8、一个数如果恰好等于它的因子之和,这个数就称为"完数"。(因子:除去这个数本身的约数)

例如6=1+2+3.编程 找出1000以内的所有完数

public class Exercise8 {
    public static void main(String[] args){
        //找出1000以内的所有完数
        for(int i=1; i<1000; i++){
            //判断i是否是完数,如果是就打印i
			/*
			完数?
				一个数如果恰好等于它的因子之和
				例如:6的因子:1,2,3
					1,2,3,6是6的约数,能够把6给整除了
					因子:除了6本身以外的约数
				例如:18的因子:1,2,3,6,9   不是完数
			如何判断i是否是完数?
			(1)先找出i的所有的因子,并且累加它的所有的因子
			(2)判断因子之和与i是否相等,如果相等就是完数
			*/

            //(1)先找出i的所有的因子,并且累加它的所有的因子
            int iSum = 0;
            for(int j=1; j<i; j++){
                //如果j能够把i整除了,j就是i的因子
                if(i%j==0){
                    iSum += j;
                }
            }

            //(2)判断因子之和与i是否相等,如果相等就是完数
            if(i == iSum){
                System.out.println(i);
            }
        }
    }
}

第9题:输出月份对应的英语单词

从键盘输入月份值(1-12),输出对应月份的英语单词,如果月份值超过1-12,提示输入错误!

import java.util.Scanner;

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

        System.out.print("请输入月份值:");
        int month = input.nextInt();

        input.close();

        switch (month){
            case 1:System.out.println("January");break;
            case 2:System.out.println("February");break;
            case 3:System.out.println("March");break;
            case 4:System.out.println("April");break;
            case 5:System.out.println("May");break;
            case 6:System.out.println("June");break;
            case 7:System.out.println("July");break;
            case 8:System.out.println("August");break;
            case 9:System.out.println("September");break;
            case 10:System.out.println("October");break;
            case 11:System.out.println("November");break;
            case 12:System.out.println("December");break;
            default:System.out.println("月份值输入有误!");
        }

    }
}

第10题:计算今天是星期几

(1)定义变量week赋值为上一年最后一天的星期值,例如:2021年12月31日的星期值5,

(2)定义变量year、month、day,分别赋值今年(例如:2022年)某一天的年、月、日值。

(3)计算这一天是星期几。

(4)开发提示

- 需要计算这一天是今年(例如:2022年)的第几天,即今年已经过了几天了(总天数)
- 再用(总天数 + 5 )% 7 的结果来判断是星期几

(5)每个月总天数:

- 平年的2月份有28天,闰年的2月份有29天。
- 1月、3月、5月、7月、8月、10月、12月有31天,
- 4月、6月、9月、11月有30天。

(6)闰年的判断标准是:

- 年份year可以被4整除,但不能被100整除

- 或者年份year可以被400整除
public class Exercise10 {
    public static void main(String[] args) {
        int week = 5;
        int year = 2022;
        int month = 3;
        int day = 8;

        //判断这一天是当年的第几天==>从1月1日开始,累加到xx月xx日这一天
        //(1)[1,month-1]个月满月天数
        //(2)单独考虑2月份是否是29天(依据是看year是否是闰年)
        //(3)第month个月的day天

        //声明一个变量days,用来存储总天数
        int days = 0;

        //累加[1,month-1]个月满月天数
        switch (month) {
            case 12:
                //累加的1-11月
                days += 30;//这个30是代表11月份的满月天数
                //这里没有break,继续往下走
            case 11:
                //累加的1-10月
                days += 31;//这个31是代表10月的满月天数
                //这里没有break,继续往下走
            case 10:
                days += 30;//9月
            case 9:
                days += 31;//8月
            case 8:
                days += 31;//7月
            case 7:
                days += 30;//6月
            case 6:
                days += 31;//5月
            case 5:
                days += 30;//4月
            case 4:
                days += 31;//3月
            case 3:
                days += 28;//2月
                //在这里考虑是否可能是29天
                if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                    days++;//多加1天
                }
            case 2:
                days += 31;//1月
            case 1:
                days += day;//第month月的day天
        }

        //计算星期
        week += days;
        week %= 7;

        //输出结果
        System.out.print(year + "年" + month + "月" + day + "日是星期");
        switch (week) {
            case 0:
                System.out.println("日");
                break;
            case 1:
                System.out.println("一");
                break;
            case 2:
                System.out.println("二");
                break;
            case 3:
                System.out.println("三");
                break;
            case 4:
                System.out.println("四");
                break;
            case 5:
                System.out.println("五");
                break;
            case 6:
                System.out.println("六");
                break;
        }
    }
}

第11题:判断打鱼还是晒网

(1)从键盘输入年、月、日,

(2)假设从这一年的1月1日开始执行三天打鱼两天晒网,那么你输入的这一天是在打鱼还是晒网。

(3)开发提示:

- 先计算这一天是这一年的第几天,即总天数
- 再用总天数 % 5(三天打鱼两天晒网的周期),根据结果来判断是打鱼还是晒网

(4)每个月总天数:

- 平年的2月份有28天,闰年的2月份有29天。
- 1月、3月、5月、7月、8月、10月、12月有31天,
- 4月、6月、9月、11月有30天。

(5)闰年的判断标准是:

- 年份year可以被4整除,但不能被100整除
- 或者年份year可以被400整除

参考答案:

import java.util.Scanner;

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

        System.out.println("请输入日期:");
        System.out.print("年:");
        int year = input.nextInt();

        System.out.print("月:");
        int month = input.nextInt();

        System.out.print("日:");
        int day = input.nextInt();

        input.close();

        //输入日期值合法性验证
        boolean flag = false;
        if (year > 0) {
            if (month >= 1 && month <= 12) {
                //计算month月的总天数
                int days;
                if (month == 2) {
                    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                        days = 29;
                    } else {
                        days = 28;
                    }
                } else if (month == 4 || month == 6 || month == 9 || month == 11) {
                    days = 30;
                } else {
                    days = 31;
                }

                if(day >= 1 && day <= days) {
                    flag = true;
                }else{
                    System.out.println("日期输入不合法");
                }
            } else {
                System.out.println("月份输入不合法");
            }
        } else {
            System.out.println("年份输入不合法");
        }

        if(flag){
            //判断这一天是当年的第几天==>从1月1日开始,累加到xx月xx日这一天
            //(1)[1,month-1]个月满月天数
            //(2)单独考虑2月份是否是29天(依据是看year是否是闰年)
            //(3)第month个月的day天

            //声明一个变量days,用来存储总天数
            int days = 0;

            //累加[1,month-1]个月满月天数
            switch (month) {
                case 12:
                    //累加的1-11月
                    days += 30;//这个30是代表11月份的满月天数
                    //这里没有break,继续往下走
                case 11:
                    //累加的1-10月
                    days += 31;//这个31是代表10月的满月天数
                    //这里没有break,继续往下走
                case 10:
                    days += 30;//9月
                case 9:
                    days += 31;//8月
                case 8:
                    days += 31;//7月
                case 7:
                    days += 30;//6月
                case 6:
                    days += 31;//5月
                case 5:
                    days += 30;//4月
                case 4:
                    days += 31;//3月
                case 3:
                    days += 28;//2月
                    //在这里考虑是否可能是29天
                    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                        days++;//多加1天
                    }
                case 2:
                    days += 31;//1月
                case 1:
                    days += day;//第month月的day天
            }

            System.out.print(year + "-" + month + "-" + day + "这一天是");
            System.out.println((days % 5 == 1 || days % 5 == 2 || days % 5 == 3 ? "打鱼" : "晒网"));
        }
    }
}


标签:练习题,case,Java,基础,System,days,break,println,out
From: https://blog.51cto.com/u_16213911/7194158

相关文章

  • java流程控制01.Scanner
    用户交互ScannerScanner交互,在之前的基本语法学习中,并没有实现程序和人的交互,但是Java给我们提供了一个工具类,我们可以获取用户的输入。java.util.Scanner是java5的新特征,我们可以通过Scanner类来获取用户的输入。基本语法:Scanners=newScanner(System.in);通过Scanner......
  • 深度理解JavaScript对象:从基础到高级
    一:概述在JavaScript中,对象是一种非常重要且强大的数据类型。熟练掌握对象的特性,既可以提高编码效率,又能编写出更加灵活和可维护的代码。本篇文章将从基础到高级,深入探讨JavaScript对象的各个方面,帮助读者全面理解对象的概念,并为实际应用中的场景提供示例说明。二:javaScript对象的......
  • SQL练习题
    1、查询每个部门最高薪水的人员名称?--第一步,找出每个部门的最高工资selectdeptno,max(sal)fromempgroupbydeptno;--第二步,将上面的结果当做一张临时表T,T和emp表连接,条件:T.deptno=e.deptnoandt.max=e.salselecte.ename,T.*fromempejoin(selectdeptno,ma......
  • JavaScript regular expression in Actions All In One
    JavaScriptregularexpressioninActionsAllInOneJavaScript正则表达式实战demos在字符串中匹配多组数据conststr='lines[0][config][options][343]';constreg=/\[([0-9]+|[a-z]+|[A-Z]+)\]/g;constgroups=[];str.replaceAll(reg,group=>{letv......
  • Go 语言基础知识
    有道云分享链接 什么是Go语言Go是一门并发支持、垃圾回收的编译型系统编程语言,旨在创造一门具有在静态编译语言的高性能和动态语言的高效开发之间拥有良好平衡点的一门编程语言。 一些设计思想不要通过共享内存来通信,要通过通信来共享内存 Go的主要特......
  • Java反射Refletion
    什么是反射?反射(Refletion)就是:加载类,并允许以编程的方式解剖类中的各种成分(成员变量、方法、构造器等)反射的作用1.可以在运行时得到一个类的全部成分然后操作2.可以破坏封装性。(很突出)3.也可以破坏泛型的约束性。(很突出)4.更重要的用途是适合:做Java高级框架5.......
  • Java学习io流总结
    一、IO的分类按照流向分输入流Input输出流Output按照传输数据的类型来分字节流字节输入:InputStream字节输出:OutputStream字符流字符输入流:Reader字符输出流:Writer按照流连接的目标来分节点流:低级流-->程序(内存)直接连接源文件包装流:高级......
  • [基础] 学习笔记
    1.重载运算符structnode{ intx; booloperator<(constnode&a)const { returnx>a.x;//从小到大 }};priority_queue<node>q;structcmp{ booloperator()(constint&a,constint&b) { ... }};priority_queue&l......
  • IDS和IPS基础知识
    一.IDS和IPSIDS(IntrusionDetectionSystems):入侵检测系统,是一种网络安全设备或应用软件,可以依照一定的安全策略,对网络、系统的运行状况进行监视,可以发现各种攻击行为并发出安全警报。IPS(IntrusionPreventionSystem):入侵防御系统,具有IDS的监控检测功能之外,还可以深度感知检......
  • java 如何根据经纬度查询出一千米内的资源数据
    使用地理信息系统(GIS)的相关技术和算法来实现根据经纬度查询一定范围内的资源数据。以下是一种基本的实现思路:获取资源数据:首先,您需要有一组资源数据,每个数据都包含了对应资源的经纬度信息。计算距离:使用距离计算公式(如haversine公式)来计算两个坐标点之间的距离。这可以......