牛客刷题|牛客刷题-Java专项练习(2022-3-30)

本文章按照牛客网每日一练上的10道题目上做错的习题来记录错题,并分享解析。

公众号:恩故事还在继续
打卡时间 2022-3-29

题目类型:基础概念

题目难易程度: ??????

题目数量:10 ?? 答对题目数:8 ??准确率:80%

1?? 表达式(short)10/10.2*2运算后结果类型是(C)
A. short B. int C. double D. float

?? 解析
这道题目其实不难,主要考察的是运算符的优先级,其次就是: 浮点数默认为double 首先我们对这个式子从左到右看(short) 主要是将int 10转为 short类型,并不是将 (10 / 10.2*2)进行类型转换。 所以我们看结果最后算出来的为浮点数,我自己选的是float,因为我忘了浮点数默认为double。


2?? 给定以下方法声明,调用执行mystery(1234)的输出结果?(B)
//precondition:x >=0 public void mystery (int x) { System.out.print(x % 10); if ((x / 10) != 0) { mystery(x / 10); } System.out.print(x % 10); }

A. 1441 B. 43211234 C. 3443 D. 12344321

?? 解析
这道题目考察的就是一个递归。之所以把这道题目作为一个错题,是因为我觉得这道题目对我了解递归的一个计算有个深刻的理解。

推导流程
1. 第一次调用mystery方法,此时参数(x)为1234,进入第四行,x不变为x=1234,1234 % 10=4,输出 4

2. 接着进入if语句,1234/10=123 !=0,进入if语句,此时x还是1234,接着第二次调用mystery方法,此时第一 次调用的方法不会继续执行,会等第二次(本次)调用的方法执行完毕后继续执行, mystery(x/10),传入的参数(x)为123,然后第四行123%10=3,参数还是不变为123,输出 3

3.接着进入if语句,第三次调用mystery()方法(此时第二次调用的方法不会继续执行,会等第三次(本次)调 用的方法执行完毕后继续执行),传入参数为123/10=12, x=12,接着第四行12%10=2,传入的参数值不会变,输出 2

4.然后进入if语句12/10!=0,第四次调用mystery()方法(此时第三次调用的方法不会继续执行,会等第四次调用 的方法(本次)执行完毕后继续执行),传入的参数(x=1)为1,进入第四行1%10,输出 1

5.然后进入if语句1/10=0不满足if语句x/10 != 0,所以本次不会继续调用mystery方法,然后程序继续执行调用下面的输出参数为1,1%10,输出 1

6.然后第四次调用的方法执行结束然后返回第三次调用的方法继续执行,调用下面的输出,参数为12,x%10=2,输出 2

7.然后第三次调用的方法执行结束然后返回第二次调用的方法继续执行,此时调用下面的输出,参数为123,x%10=3,输出 3

8.最后第二次调用的方法执行结束然后回第一次调用的方法继续执行,此时调用下面的输出,参数为1234,x%10=4,输出 4

9. 函数调用结束,最后输出结果: 43211234


总结
这篇文章算是重温Java基础的第四天, 题目虽然简单,但是通过做题才能巩固知识点。

联系 【牛客刷题|牛客刷题-Java专项练习(2022-3-30)】牛客刷题|牛客刷题-Java专项练习(2022-3-30)
文章图片

    推荐阅读