当前位置:网站首页 > Java基础 > 正文

50道java基础编程题



目录

  • 一、基础问答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)窗口输入 命令就能启动的效果。(效果截图)

(1)path环境变量的配置:
 
path是配置Windows可执行文件的搜索路径,即扩展名为.exe的程序文件所在的目录,
 
用于指定DOS窗口命令的路径。
 
告诉操作系统到哪里去找javac可执行程序配置。
 
① 永久配置方式:
 

 

 
② 临时配置方式:
 

(2)classpath的配置:
 
classpath是配置class文件所在的目录,用于指定类搜索路径,JVM就是通过它来寻找该类的class类文件的。
 
给jvm用,告诉jvm到哪里加载字节码文件配置。
 
如果没有定义环境变量classpath,java启动jvm后,会在当前目录下查找要运行的类文件;
 
如果指定了classpath,那么会在指定的目录下查找要运行的类文件。

(3)配置环境变量,达到在命令行(cmd)窗口输入wechat 命令就能启动 微信 的效果。:
 
注:因为 启动 涉及到账号 和 密码位数,故将 启动,改成启动 微信。两者操作 完全一样。
 
① 设置 Path 环境变量之前:

 
② 设置 Path 环境变量之后
 
在Path变量中添加wechat启动程序的路径,即可以在任意目录下,通过命令行执行。


3、【命令行编程】

新建一个Java文件, 然后手写Hello World程序。

(要求记事本完成,该题目提交 Helloworld程序的代码及命令行cmd运行截图即可)

答:


4、【进制转换】

将67转换为二进制、八进制、十六进制。

再将0b0(二进制)、0345(八进制)、0Xef(十六进制) 转换为十进制。

注:该题无需写代码,在纸上手算一下过程,拍照附在文档中提交作业。

(1)相应知识点:
 
十进制数:在数字的右下角标注10或D。默认是十进制。
 
二进制数:在数字的右下角标注2或B。
                  Java语言中0b开头。
 
八进制数:在数字的右下角标注8或字母O。
                  Java语言中数字0开头。
 
十六进制:在数字的右下角标注16或H。
                    Java语言中0X开头。
 
进制之间的转换
 
① 二进制 --> 十进制
 
将二进制数写成按权展开式,并将式中各乘积项的积相加,即得对应十进制数。

② 十进制 --> 二进制 / 八进制等
 
分为整数部分转换和小数部分转换
 
在十进制的小数部分转换中,有时连续乘以2不一定能使小数部分等于0,这说明该十进制小数不能用有限位二进制小数表示。这时,只要取足够多的位数,使其误差达到所要求的精度就可以了。
 
示例:十进制转换成二进制

③ 二进制 --> 八进制

④ 八进制 --> 二进制

⑤ 二进制 --> 十六进制

⑥ 十六进制 --> 二进制

(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 = ()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)将0b0(二进制)、0345(八进制)、0Xef(十六进制) 转换为十进制。
 
(0)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位原码,0和, 求它们的补码。

已知补码0和,求它们的原码。(要求如题4)

注:进制和原码等概念属于计算机编程基础知识,建议了解并熟悉它。

答:
 
(1)相应知识点:
 
正数的原码 = 补码
 
负数原码 --> 补码:符号位不变,其余位取反,末位 + 1。
 
补码的补码(补码求补)= 补码对应的原码。
 
 
(2)练习
 
正数原码 0 = 补码
 
负数原码 补码是 (符号位不变,其余位取反,末位 + 1)
 
正数补码 0 = 原码
 
负数补码 原码是 (符号位不变,其余位取反,末位 + 1)


6、【数据类型转换】

语句 byte b = 300; 编译能通过吗?

如果不能为什么呢?怎样让它通过编译呢?

(作为简答题说明一下即可)

答:
 
1)编译结果如下:
 
编译不通过。

 
2)编译不通过的原因如下:
 
①相应知识点
 
精度从高到低 double float long int short(char) byte
 
自动类型转换(隐式转换):低精度–>高精度
 
                                               boolean 类型的值不能直接转化为其它数据类型的值。
 
                                               short、char、byte相互之间不转换,他们参与运算会首先转换为 int 类型。
 
强制类型转换(显示转换): 高精度–>低精度(精度会下降)
 
②具体原因:
 
byte的表示范围是 -128~127,300超出byte表示范围,故无法完成赋值。
 
 
3)通过编译的解决方法
 
进行强制类型转换
 
byte b = (byte)300; // 此时,输出的b为44
 
或者将变量b定义成int类型,或者将byte类型的b变量的赋值,改为 -128~127内的一个数。


7、【算术运算符】

答:

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的整数次幂?

(简答题,考虑位运算符)

 

运行结果:



10、【表达式】

对于一个变量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、【读程序题】

读下列代码,指出输出结果以及原因。

 

答:
 
输出结果是 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型数组为例:

 

详细知识点:
 
:判断下一个输入是否是某种类型的元素
如:hasNextInt(),hasNextFloat()、hasNextDouble()等
 
:判断下一个输入是否是字符串
 
 
:用于获取下一个输入项
如:nextInt、nextFloat、nextDouble等
 
:用于读取String字符串数组,以空格划分(只读取输入直到空格),在读取后将光标指向本行
 
:用于读取String字符串数组,读取包括单词之间的空格和除回车以外的所有符号,在读取后将光标指向下一行

小技巧:
 
既要读取普通数据,又要读取nextLine(读取一行字符串):

举例如下:

 

运行结果:


二、编程基础30题

1、【回文数】

打印5位数中的所有回文数,每行打印10个数。最后统计一下一共有多少个5位回文数。

注:回文数即正反读都是一个数,5位数的话,只要个位与万位相同,十位与千位相同就是一个回文数。

 

运行结果:
 
1)输出所有的5位回文数
 
中间部分省略


 
2)判断是否是回文数


2、【键盘录入-switch-求星期】

根据键盘录入的数值1、2、3、4,…7输出对应的星期一、星期二、星期三…星期日。

(考虑使用switch)

 

运行结果:


3、【if多分支-求成绩】

键盘录入一个学生成绩(用int表示),自动输出该同学的成绩评级。
学生的分数取值范围[0,100]
分数大于等于90的,评级"优秀";
分数大于等于80,小于90的,评级"良好";
分数大于等于70,小于80的,评级"中等";
分数大于等于60,小于70的,评级"及格";
分数小于60的,评级"不及格";

 

运行结果:


4、【水仙花数】

请打印出所有的水仙花数。

注:所谓的"水仙花数"是指一个三位数,其各位数字的立方和等于该数本身。例如153是一个"水仙花数",因为153 = 1的三次方 + 5的三次方 + 3的三次方。(使用for循环遍历一下就出来了)

 

运行结果:


5、【求素数】

判断101-200之间有多少个素数,并输出其中所有素数。

注:素数即是除了1和它本身以外不再有其他因数的自然数。程序中可以用这个数,遍历除以2到这个数减去1。如果能够被整除,则表明此数不是素数,反之是素数。

 

运行结果:


6、【嵌套for循环-杨辉三角形】

打印下列图案(等腰三角形)

要求,根据键盘录入的行数,决定等腰三角形的行数。

 

运行结果:


7、【嵌套for循环-九九乘法表】

打印九九乘法表。(和题6基本一样)

 

运行结果:


8、【求完数】

一个数如果恰好等于它的所有真因子(即除了自身外的所有因数)之和,这个数就称为"完数"。

请编程求出1000 以内的所有完数。

 

运行结果:


9、【求不重复数字】

有1、2、3、4一共四个数字,能组成多少个不相等且无重复数字的三位数?都是多少?

注:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的就可以了。

 

运行结果:


10、【根据输入求输出-求位数、逆序输出】

键盘录入一个正整数,请求:1.它是几位数?2.逆序打印出各位数字。

 

运行结果:


11、【数列的前n项和】

有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13. 求出这个数列的前20项之和。

注:提前告诉你答案是32.164

 

运行结果:


12、【累加】

求前n个数的和,其中n>0。

 

运行结果:


13、【累乘】

求前n个数的积,其中n>0。

 

运行结果:


14、【求最大值】

分别用if和三目运算符求三个数的最大值。比较一下两种方式,哪种比较好?

 

运行结果:


15、【根据条件求数-加100/268是完全平方】

一个整数,它加上100或者268后都是一个完全平方数,请问在1万以内,这样的数有几个,分别是多少?

注:使用Math.sqrt(double a) 方法可以求a的平方根。

 

运行结果:


16、【求奇数/偶数和】

求100以内的所有奇数/偶数的和。

 

运行结果:


17、【自由落体】

假如一个小球从100米高度自由落下,每次落地后就反跳回原高度的一半。那么求它在第10次落地时,共经过多少米?第10次反弹多高?

 

运行结果:


18、【被几个9整除】

键盘录入一个数,请判断它数能被几个9整除 。如81就可以被2个9整除。

 

运行结果:


19、【判断奇偶数】

键盘录入一个in数字,判断输出它是奇数还是偶数。

 

运行结果:


20、【分解质因数】

将一个大于2的正整数分解质因数。例如:输入3的话,输出 3=3; 输入6,输出6 = 2 *3等。

 

运行结果:


21、【三个数由小到大排序】

键盘输入三个整数x、y、z,请把这三个数由小到大输出。

 

运行结果:


22、【交换值】

任意给两个整数(int)值,请交互它们的值。

反射部分和错误示例 参考 CSDN 文章   java实现值交换(swap)

内容较复杂,写进了CSDN 文章   Java–交换两数的值   中,截图如下:


23、【求自守数】

自守数是指一个数的平方的尾数等于该数自身的自然数。例如:252 = 625,762 = 5776,93762 = 。请求出10000(一万)以内的自守数的个数,并分别输出。

 

运行结果:


24、【循环练习-买饮料】

给20块钱买饮料,每瓶饮料3块钱,喝完之后退瓶子可以换回1块钱。问最多可以喝到多少瓶饮料?

 

运行结果:


25、【循环练习-蜗牛爬井】

井里有一只蜗牛,他白天往上爬5米,晚上掉3.5 米,井深56.7米,计算蜗牛需要多少天才能从井底到爬出来。

 

运行结果:


26、【键盘录入-求各位数之和】

键盘输入任意一个正整数,求各位数字之和。

 

运行结果:


27、【求和-去除7倍数和包含7】

打印出1-100之间所有不是7的倍数和不包含7的数字, 并求和。

 

运行结果:


28、【分数累加】

编写一个函数,输入n为偶数时,求1/2 + 1/4 + 1/6 + … + 1/n的结果;

当输入n为奇数时,求1/1 + 1/3 + 1/5 +… + 1/n 的结果。

 

运行结果:


29、【switch练习-某月天数】

输入年份和月份,输出这个月应该有多少天(使用switch结构,需要考虑闰年和平年,注意case穿越)

 

运行结果:


30、【三目运算符-点餐优惠方式】

某小伙想定一份外卖,商家的优惠方式如下: 鱼香肉丝单点 24 元,油炸花生米单点 8 元,米饭单点 3 元。订单满 30 元 8 折优惠。鱼香肉丝优惠价 16 元,但是优惠价和折扣不能同时使用。那么这个小伙要点这三样东西,最少要花多少钱?

 

运行结果:


三、扩展5题

扩展5题,大多涉及方法、数组、递归等知识。

1、【递归经典问题-不死神兔】

有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? (其实就是斐波那契数列)

 

运行结果:


2、【递归】

有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第50道java基础编程题一个人,他说是10岁。请问第五个人多大?

 

运行结果:


3、【排序】

随机给十个数字,对它们进行排序。(可以给一个有10个整数元素的数组,然后对数组排序)

 

运行结果:


4、【数组元素的插入】

有一个已经排好序的int数组{1, 2, 3, 4, 5, 6, 7, 8} 。现输入一个数(要求该数在1-8之间),按原来的规律将它插入数组中。

 

运行结果:


5、【数组元素的交换】

给出一个int数组,把它最大的元素与第一个元素交换,最小的元素与最后一个元素交换,输出交换后的数组。


                            

版权声明


相关文章:

  • 毕向东java基础视频教程ppt2025-04-10 23:26:02
  • 黑马 java基础2025-04-10 23:26:02
  • JAVA基础类型堆栈2025-04-10 23:26:02
  • java基础定义变量2025-04-10 23:26:02
  • java基础知识结构2025-04-10 23:26:02
  • java基础500讲2025-04-10 23:26:02
  • Java网络编程基础2025-04-10 23:26:02
  • java程序基础pdf2025-04-10 23:26:02
  • 惠州java基础培训2025-04-10 23:26:02
  • java基础知识点汇总2025-04-10 23:26:02