后端学习关卡三习题归纳及问题解决1

1.根据运算符的功能,我们把运算符分成哪几类?

  1. 算数运算符(+加、-减、*乘、/除、%取余)
  2. 赋值运算符(=赋值、+=加后赋值、-=减后赋值、*=乘后赋值、/除后赋值、%取余后赋值)
  3. 自增自减运算符(++、--
  4. 关系运算符(==、!=、>、>=、<、<=
  5. 逻辑运算符(&逻辑与、|逻辑或、!逻辑非、^逻辑异或、&&短路与、||短路或)
  6. 三元运算符(格式:关系表达式? 表达式1∶表达式2;      范例: a > b ?a : b;

2.“&”和“&&”的异同

    1. 相同点:左右两端条件均为true时,结果为true
    2. 逻辑与&,无论左边真假,右边都要执行。
    3. 短路与&&,如果左边为真,右边执行;如果左边为假,右边不执行。

3.程序输出

class OperatorTest {

    public static void main(String[] args) {

       boolean x = true;

       boolean y = false;

       short z = 40;

       if ((z++ == 40) && (y = true)) {

           z++;

       }

       if ((x = false) || (++z == 43)) {

           z++;

       }

       System.out.println("z = " + z);

    }

}

结果为:

 

4.自己定义一个int型三位数的变量并赋值(例如:int a = 123),先将这个变量拆分出个,十,百位,再使用三元运算符将这三个数中的较大数实现。

/*多行注释
        Java程序中最基本的组成单位是类
        类的定义格式:
public class 类名{}
定义一个类:OperatorTest02*/
public class OperatorTest02{
    public static void main(String[] args){
        //定义一个int型三位数变量并赋值
        int heightA=156;
//        我的身高

        //在计算之前获取三位数中每个数位上的值
        int geA=heightA%10;
        int shiA = heightA/10%10;
        int baiA = heightA/100%100;

        /*用三元运算符比较大小:拆分出数位以后,
        先两两比较百位,百位大的输出;
        若百位相同,则比较十位,十位大的输出;
        若十位相同,则比较个位,个位大的输出。*/
        int teamHeight= ((baiA>shiA)?baiA:shiA);
        System.out.println((teamHeight>geA)?teamHeight:geA);
    }
}

解题思路:拆分出数位以后,先两两比较百位,百位大的输出;若百位相同,则比较十位,十位大的输出;若十位相同,则比较个位,个位大的输出。

 

5.

写出输出结果:

class Demo{

public static void main(String[] args){

int a=3,b=8;

int c=(a>b)?a++:b++;

System.out.println("a="+a+"\tb="+b+"\tc="+c);  //

int d=(a>b)?++a:++b;

System.out.println("a="+a+"\tb="+b+"\td="+d);  //

int e=(a<b)?a++:b++;

System.out.println("a="+a+"\tb="+b+"\te="+e);  //

int f=(a<b)?++a:++b;

System.out.println("a="+a+"\tb="+b+"\tf="+f);  //

}}

 if语句

  1. 岳小鹏参加Java考试,他和父亲岳不群达成承诺: 如果: 成绩为100分时,奖励一辆BMW; 成绩为(80,99]时,奖励一台iphone xs max; 当成绩为[60,80]时,奖励一个 iPad; 其它时,什么奖励也没有。 请从键盘输入岳小鹏的期末成绩,并加以判断

    /*小明的考试成绩未知,可以使用键盘录入的方式获取值
           使用键盘录入功能需要导包,创建对象,接收数据*/
    import java.util.Scanner;
    public class KaoShiJiangLi {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入一个分数:");
            int score = sc.nextInt();
    ​
          /*由于奖励种类较多,属于多种判断,采用if...else...if格式实现*/
    if (score>100||score<0){
        //数据测试:正确数据,边界数据,错误数据
        System.out.println("您输入的分数有误");
    }else if(score==100){
        System.out.println("奖励一辆BMW");
    }
    else if(score>80 && score<=99){
        System.out.println("奖励一台iphone xs max");
    }else if(score>=60 && score<=80){
        System.out.println("奖励一个 iPad");
    }else {
        System.out.println("什么奖励也没有");
            }
        }
    }

  2. 编写程序,声明2个int型变量并赋值。判断两数之和,如果大于等 于50,打印“hello world!” 其他情况打印 “hello China!”

    public class IfDemo2 {
        public static void main(String[] args) {
    //先声明2个int型变量并赋值
            int i=16;
            int j=12;
    //使用if函数判断两数之和是否大于50
            if (i+j>50){
                System.out.println("hello world!");
            }else{
                System.out.println("hello China!");
            }
        }
    }

  3. 编写程序,声明2个double型变量并赋值。判断第一个数大于10.0, 且第2个数小于20.0,打印两数之和。否则,打印两数的乘积

public class IfDemo3 {
    public static void main(String[] args) {
//        声明2个double型变量并赋值。
        double a=9.6;
        double b=20.3;
//判断第一个数大于10.0, 且第2个数小于20.0用到逻辑与“&”和if语句
        if(a>10.0&b<20.0){
            System.out.println(a+b);
        }else {
            System.out.println(a*b);
        }
    }
}
 

 

4.编写程序:由键盘输入三个整数分别存入变量num1、num2、num3, 对它们进行排序(使用 if-else if-else),并且从小到大输出。

import java.util.Scanner;
public class IfDemo4 {
    public static void main(String[] args) {
// 2.创建对象
      Scanner sc=new Scanner(System.in);
// 3.接收数据
        System.out.println("请输入第一个整数num1:");
        int num1=sc.nextInt();
        System.out.println("请输入第一个整数num2:");
        int num2=sc.nextInt();
        System.out.println("请输入第一个整数num3:");
        int num3=sc.nextInt();
//三个数两两比较,小的输出排列,一共6种情况:
//        123,132,213,231,312,321
        if (num1<num2 & num1<num3){
            System.out.println(num1);
            if (num2<num3){
                System.out.println(num2);
                System.out.println(num3);
            }else {
                System.out.println(num3);
                System.out.println(num2);
            }
        }
​
        else if(num1>num2 & num3>num2){
            System.out.println(num2);
            if (num1<num3){
            System.out.println(num1);
            System.out.println(num3);
            }else{
            System.out.println(num3);
            System.out.println(num1);
            }
        }
​
        else if(num1>num3 & num2>num3){
            System.out.println(num3);
            if (num1<num2){
            System.out.println(num1);
            System.out.println(num2);
            }else{
            System.out.println(num2);
            System.out.println(num1);
            }
        }
​
        }
        }

 

5.我家的狗5岁了,5岁的狗相当于人类多大呢?其实,狗的前两年每 一年相当于人类的10.5岁,之后每增加一年就增加四岁。那么5岁的狗 相当于人类多少年龄呢?应该是:10.5 + 10.5 + 4 + 4 + 4 = 33岁。

编写一个程序,获取用户输入的狗的年龄,通过程序显示其相当于人 类的年龄。如果用户输入负数,请显示一个提示信息。

import java.util.Scanner;
public class IfDemo5 {
    public static void main(String[] args) {
        // 2.创建对象
        Scanner sc = new Scanner(System.in);
        // 3.接收数据
        System.out.println("请输入狗狗的年龄:");
        float age=sc.nextFloat();
​
//        使用if语句判断狗的年龄是前两年还是两年后
        if(age<=2){
            System.out.println("狗狗的年龄换算成人类是"+(age*10.5)+"岁");
        }else{
            System.out.println("狗狗的年龄换算成人类是"+(21+(age-2)*4)+"岁");
        }
    }
}

 

6.大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出 一定的条件:高:180cm以上;富:财富1千万以上;帅:是。(注意:不用管单位) 如果这三个条件同时满足,则:“我一定要嫁给他!!!” 如果三个条件有为真的情况,则:“嫁吧,将就过日子。” 如果三个条件都不满足,则:“不嫁!”

条件需要手动键盘输入,注意它们的数据类型!
import java.util.Scanner;
//导包
/*大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出
一定的条件:高:180cm以上;富:财富1千万以上;帅:是。(注意:不用管单位)
     如果这三个条件同时满足,则:“我一定要嫁给他!!!”
     如果三个条件有为真的情况,则:“嫁吧,将就过日子。”
     如果三个条件都不满足,则:“不嫁!”*/
public class IfDemo6 {
    public static void main(String[] args) {
//        创建对象
        Scanner sc=new Scanner(System.in);
//        输入数据
        System.out.println("请输入身高(cm):");
        int hight=sc.nextInt();
        System.out.println("请输入财富(万元):");
        int money=sc.nextInt();
        System.out.println("请问是否很帅(true/false):");
       boolean handsome=sc.nextBoolean();
​
//       用if语句进行比较
        if (hight>180 && money>1000 && handsome==true){
            System.out.println("我一定嫁给他!");
        }else if(hight>180 | money>1000 | handsome==true){
            System.out.println("嫁吧,将就过日子");
        }else {
            System.out.println("不嫁!");
        }
​
    }
}

 

switch判断语句

理论题1

  1. switch后面使用的表达式可以是哪些数据类型的。

取值为byte、short、int、char,JDK5以后可以是枚举,JDK7以后可以是String。

  1. 使用switch语句改写下列if语句:

   int a = 3;
​
   int x = 100;
​
    if(a==1)            
                            
       x+=5;
​
   else if(a==2)
​
       x+=10;
​
    else if(a==3)
​
       x+=16;
​
    else  
        
     x+=34;

switch改写后:

public class SwitchDemo1 {
    public static void main(String[] args) {
        int a = 3;
        int x = 100;
        switch (a) {
            case 1:
                x += 5;
                break;
            case 2:
                x += 10;
                break;
            case 3:
                x += 16;
                break;
            default:
                x += 34;
                break;
        }
​
        System.out.println(x);
    }
}

3.谈谈你对三元运算符、if-else和switch-case结构使用场景的理解

 三元运算符适用于少量数字之间比较,例如二选一,需要穷举;

if-else结构适用于条件判断;

switch用于分支条件较多的情况。

**三元运算符:执行效率较高,可读性较差,一般使用于用在二选一,直接返回的场景。**

**if-else:执行效率一般,可读性较好,可运用于任何场景,建议不要嵌套3层以上。**

**switch-case:执行效率较高,可读性较好,一般运用于分类较为明确的场景。**

**三者关系:三元运算符和 switch-case 都可以转换为 if-else,反之不可以。**

  1. 如何从控制台获取String和int型的变量,并输出?使用代码实现!

    import java.util.Scanner;
    //        1.导包
    public class SwitchDemo2 {
        public static void main(String[] args) {
    //        2.创建对象
            Scanner sc = new Scanner(System.in);
    //        3.数据输入
            System.out.println("请输入int:");
            int i = sc.nextInt();
            System.out.println(i);
    ​
            System.out.println("请输入字符串:");
            String s = sc.next();
            System.out.println(s);
        }
    }

     

题目2(综合)

模拟计算器功能,对键盘录入的两个int类型的数据进行加、减、乘、除的运算,并打印运算结果。

要求:

键盘录入三个整数,其中前两个整数代表参加运算的数据,第三个整数为要进行的运算(1:表示加法运算,2:表示减法运算,3:表示乘法运算,4:表示除法运算),演示效果如下:

请输入第一个整数: 30

请输入第二个整数: 40

请输入您要进行的运算(1:表示加法,2:表示减法,3:表示乘法,4:表示除法): 1

控制台输出:30+40=70

训练提示

  1. 用户录入了数据之后,用什么知识点去判断加减乘除四种不同的操作?

解题方案

  1. 使用switch判断语句完成。

操作步骤

  1. 使用键盘录入三个变量。

  2. 使用switch判断语句对第三个变量进行判断,匹配要执行的操作。

  3. 在每一个case中分别对第一个变量和第二个变量进行不同的操作。

参考答案

// 1.导包
import java.util.Scanner;
public class Demo2 {
    public static void main(String[] args) {
        // 2.创建键盘录入对象
        Scanner sc = new Scanner(System.in);
        // 3.提示需要输入的数据,并调用方法获取输入的数据
        System.out.println("请输入第一个整数:");
        int num1 = sc.nextInt();
        System.out.println("请输入第二个整数:");
        int num2 = sc.nextInt();
        System.out.println("请输入您要进行的运算(1:表示加法,2:表示减法,3:表示乘法,4:表示除法)");
        int type = sc.nextInt();
        // 4.使用switch语句判断计算类型,并输出相应的结果
        switch (type) {
            case 1:
                System.out.println(num1 + " + " + num2 + " = " + (num1 + num2));
                break;
            case 2:
                System.out.println(num1 + " - " + num2 + " = " + (num1 - num2));
                break;
            case 3:
                System.out.println(num1 + " * " + num2 + " = " + (num1 * num2));
                break;
            case 4:
                System.out.println(num1 + " / " + num2 + " = " + (num1 * 1.0 / num2));
                break;
            default:
                System.out.println("您输入的运算类别有误");
                break;
        }
    }
}

switch判断语句

理论题

  1. 编写程序:

    从键盘上输入2019年的“month”和“day”,要求通过程序 输出输入的日期为2019年的第几天。

import java.util.Scanner;
​
//      1.导包
/*编写程序:
从键盘上输入2019年的“month”和“day”,要求通过程序 输出输入的日期为2019年的第几天。*/
public class SwitchDemo4 {
    public static void main(String[] args) {
        // 2.创建键盘录入对象
        Scanner sc = new Scanner(System.in);
​
        int year=2019;
        // 3.提示需要输入的数据,并调用方法获取输入的数据
        System.out.println("请输入2019年任意月份:");
        int month = sc.nextInt();
        System.out.println("请输入2019年任意日期:");
        int day = sc.nextInt();
//      定义一个变量来保存天数
        int sumday = 0;
//        switch语句来求对应天数
        switch (month){
            case 12:
                sumday += 30;
//               因为case穿透,它会按月份一直累加进行下去,只要加上11月的30天就好
            case 11:
                sumday += 31;
            //        在输入月日之前用if语句先判断2019年是平年还是闰年
            // 2月出现了两种情况,平年2月28天,闰年2月29天,所以要用if语句区别开来
            case 10:
                sumday += 30;
            case 9:
                sumday += 31;
            case 8:
                sumday += 31;
            case 7:
                sumday += 30;
            case 6:
                sumday += 31;
            case 5:
                sumday += 30;
            case 4:
                sumday += 31;
 // 在输入月日之前用if语句先判断2019年是平年还是闰年
 // 2月出现了两种情况,平年2月28天,闰年2月29天,所以要用if语句区别开来
            case 3:
                if(year%400==0 || (year%4==0 & year%100!=0)){
                    System.out.println("2019年是闰年");
                    sumday += 29;
                }else {
                    System.out.println("2019年不是闰年");
                    sumday += 28;
                }
            case 2:
                sumday += 31;
            case 1:
                sumday += day;
                System.out.println(month+"月"+day+"日"+"是2019年的第"+sumday+"天");
                break;
            default:
                System.out.println("您的输入有误!!");
        }
​
    }
}

 

  1. 对于题1的升级版: 从键盘分别输入年、月、日,判断这一天是当年的第几天

    注:判断一年是否是闰年的标准: 1)可以被4整除,但不可被100整除 或 2)可以被400整除

import java.util.Scanner;
//      1.导包
/*编写程序:
从键盘上输入2019年的“month”和“day”,要求通过程序 输出输入的日期为2019年的第几天。*/
public class SwitchDemo5 {
    public static void main(String[] args) {
        // 2.创建键盘录入对象
        Scanner sc = new Scanner(System.in);
​
        System.out.println("请输入任意年份:");
        int year = sc.nextInt();
        // 3.提示需要输入的数据,并调用方法获取输入的数据
        System.out.println("请输入任意月份:");
        int month = sc.nextInt();
        System.out.println("请输入任意日期:");
        int day = sc.nextInt();
//      定义一个变量来保存天数
        int sumday = 0;
//        switch语句来求对应天数
        switch (month){
            case 12:
                sumday += 30;
//               因为case穿透,它会按月份一直累加进行下去,只要加上11月的30天就好
            case 11:
                sumday += 31;
                //        在输入月日之前用if语句先判断2019年是平年还是闰年
                // 2月出现了两种情况,平年2月28天,闰年2月29天,所以要用if语句区别开来
            case 10:
                sumday += 30;
            case 9:
                sumday += 31;
            case 8:
                sumday += 31;
            case 7:
                sumday += 30;
            case 6:
                sumday += 31;
            case 5:
                sumday += 30;
            case 4:
                sumday += 31;
                // 在输入月日之前用if语句先判断2019年是平年还是闰年
                // 2月出现了两种情况,平年2月28天,闰年2月29天,所以要用if语句区别开来
            case 3:
                if(year%400==0 || (year%4==0 & year%100!=0)){
                    System.out.println(year+"年是闰年");
                    sumday += 29;
                }else {
                    System.out.println(year+"年不是闰年");
                    sumday += 28;
                }
            case 2:
                sumday += 31;
            case 1:
                sumday += day;
                System.out.println(month+"月"+day+"日"+"是"+year+"年的第"+sumday+"天");
                break;
            default:
                System.out.println("您的输入有误!!");
        }
​
    }
}

  1. 编写一个程序,为一个给定的年份找出其对应的中国生肖。中国的生肖基于12年一个周期, 每年用一个动物代表:rat、ox、tiger、rabbit、dragon、snake、horse、sheep、monkey、 rooster、dog、pig。 提示:2019年:猪 2019 % 12 == 3

import java.util.Scanner;
//      1.导包
/*1. 编写一个程序,为一个给定的年份找出其对应的中国生肖。中国的生肖基于12年一个周期,
每年用一个动物代表:rat、ox、tiger、rabbit、dragon、snake、horse、sheep、monkey、 rooster、dog、pig。
提示:2019年:猪 2019 % 12 == 3*/
public class SwitchDemo6 {
    public static void main(String[] args) {
        // 2.创建键盘录入对象
        Scanner sc = new Scanner(System.in);
//给定一个年份
        System.out.println("请输入你要查询的年份:");
        // 对年份除以12取余,获取对应生肖
        int year = sc.nextInt();
        int shengxiao = year % 12;
        switch (shengxiao) {
            case 0:
                System.out.println(year + "年的生肖是monkey");
                break;
            case 1:
                System.out.println(year + "年的生肖是rooster");
                break;
            case 2:
                System.out.println(year + "年的生肖是dog");
                break;
            case 3:
                System.out.println(year + "年的生肖是pig");
                break;
            case 4:
                System.out.println(year + "年的生肖是rat");
                break;
            case 5:
                System.out.println(year + "年的生肖是ox");
                break;
            case 6:
                System.out.println(year + "年的生肖是tiger");
                break;
            case 7:
                System.out.println(year + "年的生肖是rabbit");
                break;
            case 8:
                System.out.println(year + "年的生肖是dragon");
                break;
            case 9:
                System.out.println(year + "年的生肖是snake");
                break;
            case 10:
                System.out.println(year + "年的生肖是horse");
                break;
            case 11:
                System.out.println(year + "年的生肖是sheep");
                break;
            default:
                System.out.println("您的输入有误!!");
        }
​
    }
}

 

for循环语句

理论操作题✌

  1. What is the result when you compile and run the following code?

    public class Test{

    public void method(){

    for(int i = 0; i < 3; i++) {

    System.out.print(i);

    }

    System.out.print(i);

    }

    }

    A. 0122

    B. 0123

    C. compile error

    D. none of these

    答案:?C 会报错

  2. 编写程序从1循环到150,并在每行打印一个值,另外在每个3的倍数行 上打印出“foo”,在每个5的倍数行上打印“biz”,在每个7的倍数行上打印 输出“baz” 。

public class ForDemo2 {
    public static void main(String[] args) {
        for (int i = 1; i <= 150; i++) {
            System.out.println(i);
​
            if (i % 3 == 0) {
                System.out.println(i + "foo");
            }
            if (i % 5 == 0) {
                System.out.println(i + "biz");
            }
            if (i % 7 == 0) {
                System.out.println(i + "baz");
            }
​
        }
    }
}

 

  1. 打印1~100之间所有奇数的和 。

    public class ForDemo3 {
        public static void main(String[] args) {
            int sum = 0;
            for(int i = 1;i <= 100;i++){
                if(i%2 != 0){
                    sum += i;
                }
            }
            System.out.println("1到100之间的奇数和为"+sum);
        }
    }

     

  1. 打印1~100之间所有是7的倍数的整数的个数及总和(体会设置计数 器的思想) 。

public class ForDemo4 {
    public static void main(String[] args) {
//        先定义个数及和的类型
        int amount =0;
        int sum = 0;
//        for循环打印
        for(int i = 1;i <= 100;i++){
//            if判断是否为7的倍数
            if(i%7 == 0){
//                每出现一次,数量+1,加在和中
                amount += 1;
                sum += i;
            }
        }
//        输出语句一定在for循环里
        System.out.println("1到100之间所有是7的倍数的整数的个数为"+amount);
        System.out.println("1到100之间所有是7的倍数和为"+sum);
    }
}

 

  1. 下面是一段程序,目的是输出10个=,但是不小心代码写错了,现在需要修改代码,使得程序完成功能,但是只能“增加”或“修改”其中“一个”字符,很明显,将i--改为i++,可以完成功能,但是需要修改“两个”字符,所以并不是一个正确的答案?

    public static void main(String[] args) {
            int n=10;
            for (int i = 0; i < n; i--) {
                System.out.println("=");
            }
        }
    ​

    将i<n改为-i<n,i前加一个“-”

    //修改一个字符,输出10个=
    public class ForDemo5 {
        public static void main(String[] args) {
            int n=10;
            for (int i = 0; -i < n; i--) {
                System.out.println("=");
            }
        }
    }
  2. 3000米长的绳子,每天减一半。问多少天这个绳子会小于5米?不考虑小数。

    出现的问题:在执行for循环判断体时出现了小偏差,误将判断条件“length >= 5”写成了“length< 5”,这时语句无法循环,输出如图一所示(错误显示):

 

 

public class ForDemo6 {
    public static void main(String[] args) {
//统计天数
        int day = 0;
//        先定义类型和长度
//        for循环打印
        for (int length = 3000; length >= 5; length /= 2) {
//出现的问题:在执行for循环判断体时出现了小偏差,
// 误将判断条件“length >= 5”写成了“length< 5”,这时语句无法循环
           day++;
        }
        System.out.println(day+"天这个绳子会小于5米");
    }
}

正确输出:

 输出从1到100之间所有不能被3整除的数;并输出这些整数的和

public class ForDemo7 {
    public static void main(String[] args) {
//        先定义个数及和的类型
        int amount =0;
        int sum = 0;
//        int i = 1;
//        for循环打印
        for(int i = 1;i <= 100;i++){
//            if判断是否为3的倍数
            if(i%3 != 0){
//                每出现一次,数量+1,加在和中
                amount += 1;
                sum += i;
                System.out.println("输出为:"+i);
            }
        }
//        输出语句一定在for循环里
        System.out.println("1到100之间所有不是3的倍数的整数的个数为"+amount);
        System.out.println("1到100之间所有不是3的倍数和为"+sum);
​
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值