Java基础50道经典练习题(22年新版) |
您所在的位置:网站首页 › 第二章java编程基础课后答案解析大全 › Java基础50道经典练习题(22年新版) |
目录
一、基础问答15题1、【基本概念问答】2、【环境变量配置问答】3、【命令行编程】4、【进制转换】5、【原码补码反码】6、【数据类型转换】7、【算术运算符】8、【浮点数】9、【位运算符】10、【表达式】11、【读程序题】12、【标识符命令规范】13、【标识符命令规范】14、【注释】15、【键盘输入】
二、编程基础30题1、【回文数】2、【键盘录入-switch-求星期】3、【if多分支-求成绩】4、【水仙花数】5、【求素数】6、【嵌套for循环-杨辉三角形】7、【嵌套for循环-九九乘法表】8、【求完数】9、【求不重复数字】10、【根据输入求输出-求位数、逆序输出】11、【数列的前n项和】12、【累加】13、【累乘】14、【求最大值】15、【根据条件求数-加100/268是完全平方】16、【求奇数/偶数和】17、【自由落体】18、【被几个9整除】19、【判断奇偶数】20、【分解质因数】21、【三个数由小到大排序】22、【交换值】23、【求自守数】24、【循环练习-买饮料】25、【循环练习-蜗牛爬井】26、【键盘录入-求各位数之和】27、【求和-去除7倍数和包含7】28、【分数累加】29、【switch练习-某月天数】30、【三目运算符-点餐优惠方式】
三、扩展5题1、【递归经典问题-不死神兔】2、【递归】3、【排序】4、【数组元素的插入】5、【数组元素的交换】
一、基础问答15题
1、【基本概念问答】
请问Java语言是跨平台的吗?JVM是跨平台的吗?为什么? 答: Java语言是跨平台的,JVM是不跨平台的。 Java能跨平台正是以JVM不跨平台为代价的。 Java的跨平台性由JVM实现,即JVM用于保证java的跨平台的特性。 原理分析: JVM是在机器和编译程序之间加入的一层抽象的虚拟机器, 这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。 编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由 解释器 来将虚拟机代码转换为特定系统的机器码执行。 在Java中,这种供虚拟机理解的代码叫做字节码(即Java源代码经过虚拟机编译器编译后产生的文件,扩展为.class的文件),它不面向任何特定的处理器,只面向虚拟机,使Java程序无须重新编译便可在多种不同的计算机上运行。 每一种平台的解释器是不同的,但是实现的虚拟机是相同的。 Java源代码---->编译器---->jvm可执行的Java字节码(即虚拟指令)---->jvm(字节码由虚拟机解释执行)---->jvm中解释器(虚拟机将每一条要执行的字节码送给解释器)----->机器可执行的二进制机器码---->程序运行。 2、【环境变量配置问答】为什么要配置Java环境变量? 不配置环境变量可不可以命令行编译执行Java代码? 请尝试配置环境变量,达到在命令行(cmd)窗口输入qq 命令就能启动qq的效果。(效果截图) 答: (1)path环境变量的配置: path是配置Windows可执行文件的搜索路径,即扩展名为.exe的程序文件所在的目录, 用于指定DOS窗口命令的路径。 告诉操作系统到哪里去找javac可执行程序配置。 ① 永久配置方式: JAVA_HOME=%安装路径%\Java\jdk path=%JAVA_HOME%\bin ② 临时配置方式: set path=路径; (2)classpath的配置: classpath是配置class文件所在的目录,用于指定类搜索路径,JVM就是通过它来寻找该类的class类文件的。 给jvm用,告诉jvm到哪里加载字节码文件配置。 如果没有定义环境变量classpath,java启动jvm后,会在当前目录下查找要运行的类文件; 如果指定了classpath,那么会在指定的目录下查找要运行的类文件。 (3)配置环境变量,达到在命令行(cmd)窗口输入wechat 命令就能启动 微信 的效果。: 注:因为 qq 启动 涉及到账号 和 密码位数,故将 启动qq,改成启动 微信。两者操作 完全一样。 ① 设置 Path 环境变量之前: ② 设置 Path 环境变量之后 在Path变量中添加wechat启动程序的路径,即可以在任意目录下,通过命令行执行。 新建一个Java文件, 然后手写Hello World程序。 (要求记事本完成,该题目提交 Helloworld程序的代码及命令行cmd运行截图即可) 答: 将67转换为二进制、八进制、十六进制。 再将0b0100101(二进制)、0345(八进制)、0Xef(十六进制) 转换为十进制。 注:该题无需写代码,在纸上手算一下过程,拍照附在文档中提交作业。 答: (1)相应知识点: 十进制数:在数字的右下角标注10或D。默认是十进制。 二进制数:在数字的右下角标注2或B。 Java语言中0b开头。 八进制数:在数字的右下角标注8或字母O。 Java语言中数字0开头。 十六进制:在数字的右下角标注16或H。 Java语言中0X开头。 进制之间的转换: ① 二进制 --> 十进制 将二进制数写成按权展开式,并将式中各乘积项的积相加,即得对应十进制数。 (2)67转换为二进制、八进制、十六进制。 ① (67)10 转换成二进制 67 / 2 = 33 (a0 = 1) 最低整数位 33 / 2 = 16 (a1 = 1) 16 / 2 = 8 (a2 = 0) 8 / 2 = 4 (a3 = 0) 4 / 2 = 2 (a4 = 0) 2 / 2 = 1 (a5 = 0) 1 / 2 = 0 (a6 = 1) 最高整数位 故 (67)10 = (1000011)2 ② (67)10 转换成八进制 67 / 8 = 8 (a0 = 3) 最低整数位 8 / 8 = 1 (a1 = 0) 1 / 2 = 0 (a2 = 1) 最高整数位 故 (67)10 = (103)O ③ (67)10 转换成十六进制 67 / 16 = 4 (a0 = 3) 最低整数位 4 / 16 = 0 (a1 = 4) 最高整数位 故 (67)10 = (43)H (3)将0b0100101(二进制)、0345(八进制)、0Xef(十六进制) 转换为十进制。 (0100101)B = 0 × 26 + 1 × 25 + 0 × 24 + 0 × 23 + 1 × 22 + 0 × 21 + 1 × 20 = (37)B (0345)O = 0 × 83 + 3 × 82 + 4 × 81 + 5 × 80 = (229)B (ef)H = 14 × 161 + 15 × 160 = (239)B 5、【原码补码反码】对于一个8位原码,01101010和11000110, 求它们的补码。 已知补码01101010和11000110,求它们的原码。(要求如题4) 注:进制和原码等概念属于计算机编程基础知识,建议了解并熟悉它。 答: (1)相应知识点: 正数的原码 = 补码 负数原码 --> 补码:符号位不变,其余位取反,末位 + 1。 补码的补码(补码求补)= 补码对应的原码。 (2)练习 正数原码 01101010 = 补码 负数原码 11000110 补码是 10111010 (符号位不变,其余位取反,末位 + 1) 正数补码 01101010 = 原码 负数补码 11000110 原码是 10111010 (符号位不变,其余位取反,末位 + 1) 6、【数据类型转换】语句 byte b = 300; 编译能通过吗? 如果不能为什么呢?怎样让它通过编译呢? (作为简答题说明一下即可) 答: 1)编译结果如下: 编译不通过。 以int a = 0; 语句为前提, a = a + 0.1; 和a += 0.1; 两条语句都能正常运行吗?两者有什么区别? (仍作为简答题回答) 答: a+=b 和 a=a+b 的区别: ① a += b执行过程:先计算出a的值,然后用一个temp对象存储,之后和b进行相加,然后将值赋值给a引用。 += 如果两边的操作数的精度不一样时会自动向低转化。 ② a = a+b 执行过程:先计算 a + b,然后再赋值给a引用,给a引用的时候如果 引用a 有计算过程,则会再次计算。 a = a+b则不会自动转化,需要手动进行强制类型转化。 练习: int a = 0; a = a + 0.1;(x)与 int a = 0; a += 0.1;(√) 对于 int a = 0; a = a + 0.1;由于 0.1 是 double 类型,因此 a + 0.1 运算结果也是 double 型,需要强制转换类型才能赋值给 int 型。 而 int a = 0; a += 0.1; 可以正确编译,因为 a += 0.1; 相当于 a = (int(a + 0.1);其中有隐含的强制类型转换。 8、【浮点数】float a = 0.1F; 和double b = 0.1; 这两条语句定义的浮点数a和b,请问它们相等嘛?为什么? 答:不相等。 float 是32位的单精度,double 是64位的双精度。 浮点数都是近似值,位数越多,表示的就越精确。 9、【位运算符】给出任意一个int 类型的正整数,如何快速判断该整数的值,是否是2的整数次幂? (简答题,考虑位运算符) public class Test { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("请输入一个数:"); int num = input.nextInt(); /* //输入的数用二进制来表示,若只有1个1,其余位全部为0,则是 2 的整数次幂,反之,则不是。 //比如 8 = 1000 ,8&7 为 1000 & 0111 = 0000 ,是 2 的整数次幂。 //与 二进制的 满2进1 有关 if ((int)(num & (num - 1) )== 0) System.out.print("您输入的数是2的整数次幂"); else System.out.print("您输入的数不是2的整数次幂"); */ //不采用位运算 boolean flag = true; while (num != 1) if (num % 2 != 0) { flag = false; System.out.print("您输入的数不是2的整数次幂"); break; } else num /= 2; if (flag) System.out.print("您输入的数是2的整数次幂"); input.close(); } }运行结果: 对于一个变量a,给出一个表达式a + “hello” ,结果的数据类型是什么? 答: (1) “+” 运算符: ① 可表示加法运算; ② 可表示正数; ③ 可表示字符串拼接; 操作数1 + 操作数2 + … 在多个操作数中,只要有一个是字符串,"+“操作执行的就是字符串拼接。 举例: System.out.println(“hello” + ‘a’ + 1); // helloa1 System.out.println(‘a’ + 1 + “hello”); // 98hello (‘a’的ascii码是97) System.out.println(“5+5=”+5+5); //5+5=55 System.out.println(5+5+”=5+5"); //10=5+5 (2)练习答案: 对于一个变量a,给出一个表达式a + “hello” ,结果的数据类型是 字符串类型,输出的是变量a的值和hello组成的字符串。 11、【读程序题】读下列代码,指出输出结果以及原因。 int a = 10; int b; System.out.println(b = a + 10);答: 输出结果是 20 b = a + 10;表示将a + 10 的结果赋值给b,于是b的结果是20 ,这个表达式的值是赋值后b的值。 12、【标识符命令规范】分析以下标识符的字符串组成,哪些是符合语法的标识符,哪些不合法? 请在这道题下面附上符合语法的标识符命名规范。 1) 1myName × 2.)你好% × 3.)My_name √ 4.)Points √ 5.)$point √ 6.)_sys_ta √ 7) OK123 √ 8)_23b# × 9)_3_ √ 10)main √ 11)class × 答: 标识符的命名规则: 由字母、数字、下划线“_”、美元符号“$”或者“¥”组成,首字符不能是数字。 大小写敏感。 不能是关键字。 13、【标识符命令规范】标识符的命名除了语法要求外,更重要的是符合约定俗成的规范。 下列标识符的字符串组成,都是符合语法要求的,请问哪些是符合约定俗成命名规范的?哪些不符合? 请在这道题下面附上符合约定俗成规范的Java标识符命名规范。(根据不同语法结构给出) 类名: 1)demo × 2)test × 3) Student √ 4) Student_ × 5) program1 × 6) MYDemo × 7) myDemo × 8) XueSheng √ 变量名: 9)age √ 10) nianLing √ 11)myName √ 12)_name × 13)Variable × 包名: 14)com.baidu √ 15)Com.Baidu × 16)bao.ceshi × 注:标识符命名规范相当重要。 答: 命名规则: (1)包: 包类似于操作系统中以文件夹的形式组织文件。 在JAVA语言中,以包来组织JAVA中的类,不同包下可以包含同名的类名。 为了包名的唯一,通常以域名反转的方式来命名包,例:com.baidu.www。 多级包: 以域名(是唯一的)反转的方式来命名包,单词全部小写。 单极包: 一个全部小写的单词。如 test (2)类和接口: 单个:首字母大写,其余字母全部小写。如 Student 多个单词:多个单词的首字母均大写,其余字母全部小写 。如:JavaBasic 、MaxAge (3)变量和方法: 单个:所有字母小写。 如:value 多个单词:第一个单词首字母小写,从第二个开始,每个单词首字母大写。 如:intValue (4)常量: 所有单词字母都大写。如MAX 多个单词:单词之间用_来分割,如MAX_AGE 具体的Java开发规范文档:阿里巴巴Java开发手册(嵩山版) 14、【注释】注释的作用是什么? 注释会对程序的运行产生影响嘛? 注释的内容会存在于Java代码编译执行的哪一部分? 答: (1)知识点 单行注释 格式:// 注释文字 多行注释 格式:/* 注释文字 */ 文档注释 格式:/** 注释文字 */ 可用来生成网页格式的帮助文档。 多行和文档注释都不能嵌套使用。(2)练习答案 ① 注释的作用:对程序语言进行说明,有助于开发者和用户之间的交流,方便理解程序。 ② 注释会对程序的运行产生影响嘛? 注释不是编程语句,因此被编译器忽略。不会对程序的运行产生影响。 ③ 注释的内容会存在于Java代码编译执行的哪一部分? 注释只存在于.java文件中,编译的时候会将注释全部自动删除。 如果通过反编译工具由.class得到的.java文件是没有注释内容的。 15、【键盘输入】如果我想在Java程序中进行键盘输入,提升程序的扩展性。 需要按几个步骤进行?请写出步骤。 答: ① 创建 扫描器 对象,获取用户的输入 ② 读取数据,读取数据的方法见下面的详细知识点 ③ 关闭 下面以int型数组为例: public static void main(String[] args) { //Scanner类用于获取键盘输入,是一个基于正则表达式的文本扫描器 //创建 扫描器 对象,获取用户的输入 //System.in输入、System.out输出 Scanner input = new Scanner(System.in); System.out.println("输入数据:"); int n = input.nextInt(); int[] arr = new int[n]; //int等基本数据类型的数组,读取用nextInt() for(int i=0; i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |