Java第四次作业【完结】

本次Java作业要求,使用Java中的两种条件语句实现,if条件与switch条件。

一、年会抽奖

在这里插入图片描述

Java代码实现


使用switch语句实现

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        //创建扫描器,接收控制台的数据
        Scanner in=new Scanner(System.in);

        System.out.print("请输入您的奖号:");
        //定义一个变量用于接收,控制台输入的奖号
        int number=in.nextInt();

        /*switch版*/
        /*计算值,由上往下逐个判断是否与 case 后的常量值相同
        相同则执行case后的若干语句,直到遇到break语句为止,退出switch语句;
        不相同则继续往下判断,若所有case语句条件都不符合,则执行default后的内容*/
        switch(number){
            case 1 : {
                System.out.println("恭喜获得一等奖:42寸彩电");
                break;
            }case 2 : {
                System.out.println("恭喜获得二等奖:光波炉");
                break;
            }case 3 : {
                System.out.println("恭喜获得三等奖:加湿器");
                break;
            }case 4 : {
                System.out.println("恭喜获得安慰奖:16G-U盘");
                break;
            }default : {
                System.out.println("奖号错误,无此奖号的奖品");
                break;
            }
        }
        //关闭扫描器
        in.close();
    }
}

switch语句运行结果

在这里插入图片描述



使用if语句实现

import java.util.Scanner;	//导包

public class Main {
    public static void main(String[] args) {
        //创建扫描器,接收控制台的数据
        Scanner in=new Scanner(System.in);

        System.out.print("请输入您的奖号:");
        //定义一个变量用于接收,控制台输入的奖号
        int number=in.nextInt();
        
        //判断奖号与用户输入的值相同相同,相同则进入该语句,不同则继续往下执行
        if(1 == number){
            System.out.println("恭喜获得一等奖:42寸彩电");
        }else if(2 == number){
            System.out.println("恭喜获得二等奖:光波炉");
        }else if(3 == number){
            System.out.println("恭喜获得三等奖:加湿器");
        }else if(4 == number){
            System.out.println("恭喜获得安慰奖:16G-U盘");
        }else{
            System.out.println("奖号错误,无此奖号的奖品");
        }

        //关闭扫描器
        in.close();
    }
}

if语句运行结果

在这里插入图片描述



二、百度一下

在这里插入图片描述

字符串比较注意点

需要注意的是,在代码中使用 == 号,进行字符串类型之间的比较时,进行比较的是地址值,而不是数据值,String类型进行比较,需要调用String类中的equals方法,该方法会进行目标值与调用者值的比较,区分大小写。

而在switch语句中,使用case语句判断String类型的值,在JDK7之前是不被允许的,会抛出一个异常,但在JDK7以及之后是支持在 switch中case String类型。



Java代码实现

使用switch语句实现

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        //创建扫描器,接收控制台的数据
        Scanner in=new Scanner(System.in);

        System.out.println("请您输入公司名称");
        //定义字符串型一个变量接收控制台输入的公司名称
        String firmName=in.next();
        
        //计算值结果,然后进行判断
        switch (firmName){
            case "明日科技" :{
                System.out.println("明日科技主要出版专业的互联网编程语言书记," +
                        "针对零基础,本着快速上手、易学的原则。" +
                        "出版的书籍有python,c语言,Java系列等");
                break;
            } case "阿里巴巴" :{
                System.out.println("阿里巴巴是国内最大的互联网购物平台之一," +
                        "旗下有支付宝、淘宝等业务。");
                break;
            }case "京东集团" :{
                System.out.println("主要经营网上购物商城,几乎包括了所有人们需要的东西," +
                        "包括书籍、日常生活用品、交通工具、电子产品系列等");
                break;
            }
            default: {
                System.out.println("未查询到此公司,请确认输入是否正确,或暂无上传至网络");
                break;
            }
        }
        //关闭扫描器
        in.close();
    }
}

switch运行结果

在这里插入图片描述

使用if语句实现

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        //创建扫描器,接收控制台的数据
        Scanner in=new Scanner(System.in);

        System.out.println("请您输入公司名称");
        //定义字符串型一个变量接收控制台输入的公司名称
        String firmName=in.next();

        if(true == firmName.equals("明日科技")){
            System.out.println("明日科技主要出版专业的互联网编程语言书记," +
                    "针对零基础,本着快速上手、易学的原则。" +
                    "出版的书籍有python,c语言,Java系列等");
        }else if(true == firmName.equals("京东集团")){
            System.out.println("阿里巴巴是国内最大的互联网购物平台之一," +
                    "旗下有支付宝、淘宝等业务。");
        }
        else if(true == firmName.equals("阿里巴巴")){
            System.out.println("主要经营网上购物商城,几乎包括了所有人们需要的东西," +
                    "包括书籍、日常生活用品、交通工具、电子产品系列等");
        }else{
            System.out.println("未查询到此公司,请确认输入是否正确,或暂无上传至网络");
        }
        //关闭扫描器
        in.close();
    }
}

if运行结果

在这里插入图片描述



三、查询高考录取分数线

在这里插入图片描述

Java代码实现

switch语句实现

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        //创建扫描器,接收控制台的数据
        Scanner in=new Scanner(System.in);

        System.out.println("请输入要查询的录取分数线(比如民办本科、艺术类本科、体育类本科、二本、一本):");

        //定义一个字符串类型变量,用于接收控制台输入的内容
        String scores_line=in.next();

        switch(scores_line){
            case "民办本科" :{
                System.out.println("民办本科录取分数线:350分");
                break;
            }case "艺术类本科" :{
                System.out.println("艺术类本科录取分数线:290分");
                break;
            }case "体育类本科" :{
                System.out.println("体育类本科录取分数线:280分");
                break;
            }case "二本" :{
                System.out.println("二本录取分数线:445分");
                break;
            }case "一本" :{
                System.out.println("一本录取分数线:555分");
                break;
            } default :{
                System.out.println("专科,祝你好运");
                break;
            }
        }
        //关闭扫描器
        in.close();
    }
}

switch运行结果

在这里插入图片描述


if语句实现

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        //创建扫描器,接收控制台的数据
        Scanner in=new Scanner(System.in);

        System.out.println("请输入要查询的录取分数线(比如民办本科、艺术类本科、体育类本科、二本、一本):");

        //定义一个字符串类型变量,用于接收控制台输入的内容
        String scores_line=in.next();

        if(true == scores_line.equals("民办本科")){
            System.out.println("民办本科录取分数线:350分");

        }else if(true == scores_line.equals("艺术类本科")){
            System.out.println("艺术类本科录取分数线:290分");

        }else if(true == scores_line.equals("体育类本科")){
            System.out.println("体育类本科录取分数线:280分");

        }else if(true == scores_line.equals("二本")){
            System.out.println("二本录取分数线:445分");
        }else if(true == scores_line.equals("一本")){
            System.out.println("一本录取分数线:555分");
        }else {
            System.out.println("专科,祝你好运");
        }

        //关闭扫描器
        in.close();
    }
}
if运行结果

在这里插入图片描述



四、计算累加值

计算 2+4+6+8+……+100的值

1、循环求解

public class Main {
    public static void main(String[] args) {

        /*
        * 用循环来循环获取需要累加的值
        * 再定义一个变量来承接累加起来的值
        * 最后将结果输出
        * */

        int sum=0;  //总和
        //首先i从 2 开始,然后到i大于100结束,并且i自增2,就可以获得所以的偶数了
        for(int i=2; i<=100; i+=2){
            sum+=i; //累加
        }
        System.out.println("循环求解:"+sum);
    }
}

运行结果
在这里插入图片描述


2、数学公式求解

通过数学公式,高斯算法求解,以首项加末项乘以项数除以2来计算“1+2+3+4+5+···+(n-1)+n”的结果。这样的算法被称为高斯算法。

int res=(2+100)*50/2;   // 首项+尾项*项数/2 
System.out.println("公式求解:"+res);

运行结果
在这里插入图片描述
运行结果是与循环计算求得的结果是一样的,如果以后没有特殊要求的话,那么使用数学公式是最优解的



五、求n个整数的乘积

输入十个数,并求这十个数的乘积

代码实现

import java.util.Scanner;	//导包
public class Main {
    public static void main(String[] args) {
        
        /*
        * 使用循环求得n个数的乘积
        * 使用一个long类型的变量来接收累乘的结果,尽量防止溢出
        * 使用一个变量来获取控制台每次的输入
        * 因为变量每次接收控制台的输入是赋值接收的,所以每次获取都会覆盖掉上一次的结果,达到获取n个数的效果
        * */
        
        Scanner in=new Scanner(System.in);  //建立扫描器

        int n=10;   //表示需要累乘多少个数
        long sum=1L;    //使用long类型来尽量防止溢出

        System.out.printf("请输入%d个整数\n",n);
        //循环获取n个数
        for(int i=0; i<n; ++i){
            int num=in.nextInt();   //获取控制台输入
            sum*=num;   //累乘
        }
        System.out.println("结果:"+sum);
    }
}

运行结果

在这里插入图片描述



六、按要求输出数字

要求按序输出 0-9 之间的整数数字,但是不能包含数字 6

代码实现

public class Main {
    public static void main(String[] args) {

        /*
        * 使用一个循环来获得0-9之间的数字,并且按题目要求:不输出数字6
        * 那么在循环内加if判断,在值为6的时候,就不输出数值,不是则输出数值
        * */
        
        for(int i=0; i<10; ++i){
            //不等于6则输出数字,等于则不输出,达到跳过数字6的效果
            if(i != 6){
                System.out.print(i+" ");
            }
        }
        System.out.println();
    }
}

运行结果

在这里插入图片描述



七、输出1-n之间的所有素数

输入一个正整数 n,然后打印出1到n 中的所有素数

素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。通俗点讲就是除了1和本身之外,不能被其它自然数整除的数

试除法求解

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
        /*
        * 循环2到n之间的数字i
        * 再嵌套一个内循环,内循环获取从2到i-1之间的数字
        * 在这个区间内如果能被其他数整除,则说明不是素数,不输出
        * 如果不能被其他数整数,则说明是素数,输出
        * */
		System.out.printf("请输入一个数字");
        int n=in.nextInt();   //1-n
        System.out.print(n+"以内的素数有:");
        //外循环获得2到n之间的数字
        for(int i=2; i<n; ++i){
            //标志,标志在内循环中是否有被其他数整除
            boolean flag=true;
            //内循环获取2-i-1之间的数字
            for(int j=2; j<i; ++j){
                //每个数进行判断,是否能被整数
                if(i%j == 0){
                    flag=false; //能整除,则将flag置为false,并结束内循环
                    break;
                }
            }
            //如果flag在内循环中没有变为false,那么说明i就是一个素数,将其输出
            if(flag){
                System.out.print(i+" ");
            }
        }
        System.out.println();
    }
}

结果
在这里插入图片描述



埃氏筛法求解

使用试除法进行求解素数,虽然能等到正确的答案,但是效率还是有点低的,因为每次计算一个数是否为质数的时候,都要从2一直遍历到这个数-1位置,中间重复的计算是很多的。所以这个时候可以使用另一种算法求解,埃氏筛法

埃拉托斯特尼筛法,简称埃氏筛或爱氏筛,是一种由希腊数学家埃拉托斯特尼所提出的一种简单检定素数的算法。要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。
此段文字来自百度百科。

简洁的说埃氏筛法的思想就是,每次求得一个素数之后,先将这个数标记,然后将这个素数到n之间的倍数,全部筛去,因为一个素数的倍数是可以被整数的,然后留下的就是素数了。简化了试除法的很多重复计算

代码实现

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
    /*
        * 算法实现:创建一个n个空间数组,每次求的一个素数,就将这个数的所有倍数在数组中进行标记
        * 将没有标记过的数进行输出,并重复上一个过程
        * 没有标记过的数,则跳过
        * */
        /*埃氏筛法*/
        Scanner in= new Scanner(System.in); //创建扫描器
        int n=in.nextInt(); //接收控制台输入
        boolean[] flag=new boolean[n];  //创建一个boolean类型数组,标记每个素数的倍数

        System.out.printf("1到%d之间的素数有:\n",n);
        //循环从2开始,最小的质数是2
        for(int i=2; i<n; ++i){
            //如果 flag[i] 是false则进入后面的语句,如果是true,则表示已经被筛选过了,不进入
            if( !(flag[i]) ){
                System.out.printf(i+" ");	//将素数输出
                for(int j=(2*i); j<n; j+=i){	//从i的倍数开始,将i的所有倍数筛去。
                    flag[j]=true;	//标记为true,表示筛去
                }
            }
        }
    }
}

运行结果
在这里插入图片描述
可能讲的不是很清晰,就当是一个大概描述吧,以后有机会的话,会再开一篇文章来详细说明吧



八、打印九九乘法表

打印九九乘法表

代码实现

public class Main {
    public static void main(String[] args) {

        /*
        * 利用嵌套的两层循环来模拟两个数相乘的过程
        * 并讲相乘结果输出
        * */

        System.out.println("九九乘法表");
        for(int i=1; i<10; ++i){
            //结束条件为:j>i
            for(int j=1; j<=i; ++j){
                System.out.printf("%d * %d = %-2d\t",j,i,j*i);  //输出结果
            }
            System.out.println();   //换行
        }
    }
}

运行结果

在这里插入图片描述
注意上述代码的输出语句中的 格式控制字符之间的 -2 ,意义是指定数据的输出宽度,当数据的实际位数大于指定的位数时,则按实际位数输出,当小于时则补空格,直到满足指定的位数,负号表示左对齐右补空格,否则就右对齐左补空格



输出闰年

输入一个年份n,然后输出从 1949 年到 n 年中所有的闰年

闰年:年份是4的倍数且不是100的倍数或者是400的倍数。满足这些条件的就是闰年

代码实现

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        
        /*
        * 使用循环来获取开始年份到n之间的每一个年份
        * 在循环内部对每个年份根据闰年的判断条件进行判断,是闰年则输出,不是则跳过
        * */
        
        Scanner in=new Scanner(System.in);

        System.out.print("请输入一个年份:");
        int n=in.nextInt(); //接收控制台输入的年份
        final int startYear=1949;   //题目规定的开始年份,定义为常量
        
        /*如果输入的年份小于题目要求的开始年份,那么输出错误提示,直接结束程序*/
        if(n < startYear){
            System.out.println("输入年份有误,输入的年份不能小于"+startYear+"年,请重新输入");
            return;
        }

        System.out.printf("%d 到 %d 之间有以下年份是闰年。\n\n",startYear,n);
        int count=0;    //控制输出列数
        
        for(int i=startYear; i <= n; ++i){  
            //判断条件,符合条件则进入
            if( (i%4 == 0 && i%100 != 0) || (i%400 == 0)){
                
                System.out.printf("%d年\t",i);   //输出闰年年份
                //每输出四个年份后,就换行一次
                if((++count)%4 == 0){
                    count=0;
                    System.out.println();
                }
            }
        }
        in.close(); //关闭扫描器
    }
}

运行结果

在这里插入图片描述



结尾

上述就是本次作业解法,本次前三题使用了两种解法来解决这些题目,在switch同意能达到要求的情况下,尽量使用switch语句实现,能精简代码。需要注意的是,在使用switch语句时,每条case条件内都需要添加上break语句,特殊情况除外。 后面几题难度还是有点的,但只要理解了题目解题逻辑,就能游刃而解了。


上述代码,如有问题,欢迎在评论区留言讨论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值