Java初学--第三章例题(2)

因为第三章的知识比较重要,尤其是选择结构,所以,我们需要更多的例题来巩固!Fighting!

第八题

分析:这道题主要是比较用户与程序的数字及顺序是否相同,从而确定奖金

步骤:(1)提示用户输入一个两位数

           (2)程序随机产生一个两位数(Random),定义一个变量computer来存放

           (3)检测用户是否中奖:

                           ▪首先检测输入值是否精确匹配computer

                           ▪如果没有,就检测其逆序是否匹配computer

                           ▪如果还没有,就检测是否有数字在computer中

                           ▪如果也没有,那就输出“Sorry,no match”

代码展示:

import java.util.Scanner;

class Demo03_005{
    public static void main(String[] args){
        //Math.random的范围是[0,1.0),所以乘10就是[0,100)
        //前面加上int强转,就是0-99之间的所有整数
        int lottery = (int)(Math.random()*100);
        Scanner input = new Scanner(System.in);
        System.out.print("Enter your lottery pick(two digits):");
        int guess = input.nextInt();
        int lottery1 = lottery / 10;//可以得到十位数字
        int lottery2 = lottery % 10;//得到个位数字
        int guess1 = guess / 10;//得到用户的十位数字
        int guess2 = guess % 10;//得到用户的个位数字
        System.out.println("The lottery number is" + lottery);
        if(guess == lottery){
            System.out.println("You win $10000");
        }else if(guess2 == lottery1 && guess1 == lottery2){
            System.out.println("You win $3000");
        }else if(guess1 == lottery1 
              || guess1 == lottery2
              || guess2 == lottery1
              || guess2 == lottery2){
                  System.out.println("You win $1000");
        }else{
            System.out.println("Sorry,no match");
        }
        
    }
}

 

结果展示:

      


第九题

分析:这道题其实不难,题中已经给了公式,根据步骤编码即可。值得注意的是,一月和二月转换为上一年的13和14月,同时年份减1.

那我们就直接看代码:

import java.util.Scanner;
class Demo03_07{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in); 
        System.out.print("请输入年份:");//先输入年份
        int year=scanner.nextInt();
        System.out.print("请输入月份:");//输入月份 
        int month=scanner.nextInt();
        System.out.print("请输入日期:");//输入日期
        int day=scanner.nextInt();

        if(month==1||month==2){ //4.对特殊的1月和2月做处理
            month+=12;
            year-=1;
        }
        int h=(day+26*(month+1)/10+year%100+year%100/4+year/100/4+5*year/100)%7;
        
        switch(h){
            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;
        }
    }
}

 

 结果展示:

         


第十题

分析:我们首先要确定出,小矩形在大矩形中的极限条件,即小矩形的中心在蓝色的范围之内;那小矩形在大矩形之外的条件就是小矩形的中心在红色的范围之外;在蓝色范围外,红色范围内,就是会重叠的情况。

步骤:(1)先输入两个矩形的中心、宽、高

           (2)求出极限范围

           (3)判断两个矩形的位置

import java.util.Scanner;
class Demo03_10{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入第1个矩形的信息:");//输入大矩形的中心,宽和高
        double x1=scanner.nextDouble();
        double y1=scanner.nextDouble();
        double w1=scanner.nextDouble();
        double h1=scanner.nextDouble();
        System.out.print("请输入第2个矩形的信息:");//输入小矩形的中心,宽和高
        double x2=scanner.nextDouble();
        double y2=scanner.nextDouble();
        double w2=scanner.nextDouble();
        double h2=scanner.nextDouble();

        double inXMin=x1-(w1-w2)/2;
        double inXMax=x1+(w1-w2)/2;
        double inYMin=y1-(h1-h2)/2;
        double inYMax=y1+(h1-h2)/2;

        double outXMin=x1-(w1+w2)/2;
        double outXMax=x1+(w1+w2)/2;
        double outYMin=y1-(h1+h2)/2;
        double outYMax=y1+(h1+h2)/2;
        if(x2>=inXMin&&x2<=inXMax&&y2>=inYMin&&y2<=inYMax){
            System.out.println("小矩形在大矩形里面!");
        }else if(x2<=outXMin||x2>=outXMax||y2<=outYMin||y2>=outYMax){
            System.out.println("小矩形在大矩形外面!");
        }else{
            System.out.println("小矩形和大矩形相交!");
        }
    }
}

结果展示:

          


第十一题 

分析步骤:

(1)提示用户输入若干数字,定义sum变量用来存储数字总和;定义positives用于存储正数的个数;定义negatives用来存储负数的个数(提示语句只提示一次,可以写在循环外面)scanner.nextInt指的是获取下一个输入的数字,现将输入的数字放入一个缓冲区中依次判断,再计算个数的时候,应该和判断正负同时进行

(2)使用while(true)来进行未知次数的循环(其实,我们可以在while之前定义一个num=10,在while中现将num带入循环;但是容易将num与用户输入的数字混淆)

(3)如果为0则退出

(4)不是则继续打印

代码展示:

import java.util.Scanner;

class Demo03_11{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        double sum=0;  //总和
        int positives=0;    //正数的个数
        int negatives=0;    //负数的个数
        System.out.print("请输入若干数字:");
        while(true){//不管三七二十一 先进来再说
            int num=scanner.nextInt();
            if(num!=0){
                sum+=num;
                if(num>0){
                    positives++;
                }else{
                    negatives++;
                }
            }else{
                break;  //跳出当前循环
            }
        }   
        if(positives+negatives==0){
            System.out.println("没有其他数字的输入,除了0");
        }else{
            System.out.println("正数的个数"+positives);
            System.out.println("负数的个数"+negatives);
            System.out.println("总和"+sum);
            System.out.println("平均值"+sum/(positives+negatives)); 
        }
    }
}

结果展示:

         


第十二题

分析步骤:提示用户输入两个数字,定义一个变量gcd,初始值为1,检测变量k是否为两个数字的最大公约数,直到k大于其中一个数字为止,我们可以先都除较小的那个数字,如果能整除,就不考虑接下来的了,如果不行,就从大往小的找,如果第一个数字能整除某个数且第二个数字也能整除某个数,那这个数就是最大公约数

代码展示

import java.util.Scanner;
class Demo03_12{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入两个数字:");//1.输入两个数字
        int n1=scanner.nextInt();
        int n2=scanner.nextInt();
        int gcd=1;
        for(int i=n1<n2?n1:n2;i>=1;i--){
            if(n1%i==0&&n2%i==0){
                gcd=i;
                break;
            }
        }
        System.out.println(gcd);

    }
}

结果展示:

        

 


第十三题

分析步骤:提示用户输入一个整数,先从2找,到它数字本身,循环整除,如果变为数字为1,就结束。例如这个数字是120.

因为120整除的次数不确定,所以我们要使用while,但是从2开始整除确定每一阶段的因子的过程是一个确定的过程,所以可以使用for循环。详见代码

import java.util.Scanner;
class Demo03_13{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个数字:");
        int num=scanner.nextInt();
        while(true){
            for(int i=2;i<=num;i++){
                if(num%i==0){
                    System.out.print(i+" ");
                    num=num/i;
                    break;
                }
            }
            if(num==1){
                break;
            }
        }
    }
}

结果展示:

        


第十四题

分析:提示用户输入1-15之间的一个数字,以第四行为例,x∈【-3,3】,对应的值为y=|x|+1,第五行x∈【-4,4】,y=|x|+1;

代码展示:

import java.util.Scanner;
class Demo03_14{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入行数:");
        int line=scanner.nextInt();
        for(int i=1;i<=line;i++){
            for(int k=1;k<=(line-i);k++){
                if(line<10){
                    System.out.print("  ");
                }else{
                    System.out.print("   ");
                }
            }
            for(int x=-(i-1);x<=i-1;x++){
                if(line<10){
                    System.out.printf("%-2d",Math.abs(x)+1);
                }else{
                    System.out.printf("%-3d",Math.abs(x)+1);
                }
            }
            System.out.println();
        }
    }
}

结果展示:


第十五题 

分析:这道题其实比上一道题简单,只用打印一部分,值得注意的就是空格的打印,那我们就直接来看代码吧:

class Demo03_15{
    public static void main(String[] args){
        for(int i=1;i<=6;i++){
            for(int j=1;j<=i;j++){
                System.out.print(j+" ");
            }
            System.out.println();
        }
        System.out.println("==========");
        for(int i=1;i<=6;i++){
            for(int j=1;j<=7-i;j++){
                System.out.print(j+" ");
            }
            System.out.println();
        }
        System.out.println("==========");
        for(int i=1;i<=6;i++){
            for(int k=1;k<=6-i;k++){
                System.out.print("  ");
            }
            for(int j=i;j>=1;j--){
                System.out.print(j+" ");
            }
            System.out.println();
        }
        System.out.println("==========");
        for(int i=1;i<=6;i++){
            for(int k=1;k<=i-1;k++){
                System.out.print("  ");
            }
            for(int j=1;j<=7-i;j++){
                System.out.print(j+" ");
            }
            System.out.println();
        }
    }
}

结果展示:


 第十六题

分析:以第四行为例,数字分别是2的次幂

                   1  2  4  8  4  2  1

            2^   0  1  2  3  2  1   0      先增后减   y 的取值

                  -3 -2 -1 0  1  2   3       x坐标

代码展示:

class Demo03_16{
    public static void main(String[] args){
        for(int i=1;i<=8;i++){
            for(int k=1;k<=8-i;k++){
                System.out.print("    ");
            }
            for(int x=-(i-1);x<=i-1;x++){
                System.out.printf("%4d",(int)Math.pow(2,i-1-Math.abs(x)));
            }
            System.out.println();
        }
    }
}

结果展示:

 

 

最近几次的题是有点多,但是它可以帮助我们巩固知识,熟能生巧嘛! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值