1. 三种控制结构是什么?
答:顺序结构,选择结构,循环结构
2. 如果if语句后不加{},if的控制范围是否只限于第一句?
答:if语句的控制范围只能是紧接着的一句,使用{}可以将多个语句合并成为一个复合语句,进而控制多个语句。
3. Math.random()是什么意思?如果想要获取15到20之间的随机数怎么办?
答:Math.random()是使用java.lang.Math类中的静态方法random(),获取一个0-1之间的随机浮点数。想要获得15-20之间的随机数的语句: 15+(int)(Math.random()*6);
4. switch语句的功能是否可以完全使用if else if else来代替?如果是,为什么还要使用switch语句?
答:switch语句完全可以使用if else语句来代替,因为switch语句的效率比if else语句的效率高。
5. switch语句中的表达式需要是什么类型?
答:int类型(包括可以自动转为int类型的byte,short,char)
Jdk1.7以后可以使String类型和枚举类型
6. switch语句中一个case执行后,什么时候结束执行这个case语句?
答:一旦开始执行某个case语句,直到遇到break语句或者default语句或者switch语句执行完。
7. switch语句中,default是否必须写?
答:否,default语句不必要写,就像if语句不必要后面一定有else语句一样。
8. 下面代码,有什么错误?
switch (c2) { case 'y'; case 'w'; System.out.println("半元音"); break; default: System.out.println("辅音"); } |
答:case语句后面应该是冒号: 。
9. 循环结构模拟了现实世界中什么逻辑?
答:各种重复问题。
10. 循环结构的四种内部结构是什么?
答:1)while(布尔表达式){循环体;} while循环
2)do{循环体;}while(布尔表达式) do-while循环
3)for(初始化表达式;布尔表达式;步进表达式){循环体;} for循环
4)for(集合或数组中的类型 : 集合或者数组){循环体;} 增强for循环
11. while和do-whlie有什么区别?
答:while语句循环的次数为0-无限次,do-while语句循环次数是1-无数次。
12. 什么情况下会出现死循环?请举个例子。
答:循环条件始终成立,且没有可以跳出循环的语句时。while(true){System.out.println(1)}
13. for循环相比于while循环有什么优势?
答:for循环可以明确的推断出循环的次数。并且可以根据下标访问数组元素。
14. 下面代码都有什么问题?
do{ System.out.println(a); a++; }while(a<0) |
答:1)变量a没有初始化。
2)do-while语句结尾应该加上分号。
15. 下面代码有什么错误?如果有请指出错误。
for(int i=0; i<=10;i++){ System.out.println(i); } System.out.println(i); |
答:变量i超过了作用域。
16. 循环中break的作用是什么?continue的作用是什么?
答:break是用来跳出循环体的,continue是结束本次循环,进入下一次循环。
17. 语句块能否使用外部的变量?语句块中定义的变量,外部能否使用?
答:1)语句块可以使用外部的变量,因为语句块在外部变量的作用域范围内。
2)语句块中定义的变量,作用域范围为当前语句块,所以外部不能使用。
18. 方法的定义中,是否必须有返回值类型?如果确实不需要返回值,用哪个关键字来声明?
答:方法可以没有返回值类型,当方法不需要返回值时,可以使用void关键字来声明。
19. 方法的定义中,return语句是否必要,他有什么作用?
答:当方法不需要返回值时,可以没有return语句。return语句主要用来结束当前方法,并将其后的值返回给方法调用者。
20. Java中传递是值传递还是引用传递?
答:基本数据传递的是值的拷贝,引用数据类型传递的是对象地址的拷贝。
21. 方法定义中,形式参数和实际参数的区别?
答:形式参数是方法定义中的参数列表,表示该方法接受怎样的参数类型。
实际参数是方法调用时,用来传入方法的实际数据。
22. 方法定义时,使用形参还是实参?
答:形参,方法定义时,使用形参,方法调用时,使用实参。
23. 定义形参时,必须要写变量类型吗?
答:必须要写变量类型。
24. 实参类型是否必须和形参类型匹配?
答:是的,必须要和形参匹配,匹配包括当该某方法的实参类型可以自动转换为某方法的形参类型,例如,形参时int型,实参是short类型的,这种情况是匹配的。
25. 什么是方法的重载,有什么用?
答:在同一个类中,方法名相同,参数列表不同。方法重载的作用:多态。
26. 两同三不同指的是?返回值不同构成重载吗?形参名称不同构成重载吗?
答:两同指的是同一个类,同一方法名,三不同指的是参数列表的类型,个数和顺序不同。返回值不同和形参名称不同均不构成重载。
27. 递归算法中,递归头和递归体分别指的是什么?
答:递归头指的是递归终止的部分,递归体是自己调用自己的部分。
28. 递归算法的优点是什么?递归算法的缺点是什么?
答:递归算法的优点是算法简单(将复杂的问题拆解成简单的问题),缺点是效率低(递归算法大量的开辟方法栈和关闭方法栈,大量占用资源)。
29.【上机】使用递归算法完成阶乘算法。
public class Demo { public static void main(String[] args) { int i = factorial(10); System.out.println(i); } public static int factorial(int n){ if(n ==1 ) return 1; return n*factorial(n-1); } } |
30. 【上机】根据随机生成的月份,打印该月份的天数。(不考虑闰年)。
public class Demo { public static void main(String[] args) { int month = (int)(Math.random()*12)+1; System.out.print(month+"月天数为:"); if(month == 2) System.out.println(28); else if(month==4 || month==6 || month==9 || month==11) System.out.println(30); else System.out.println(31); } } |
31. 【上机】用while循环和for循环分别计算100以内的奇数和及偶数和。
public class Demo { public static void main(String[] args) { int j = 1; /*奇数计算*/ int o = 2; /*偶数计算*/ int sumJ = 0; /*奇数和*/ int sumO = 0; /*偶数和*/ while(j < 100){ sumJ += j; j+=2; } for(;o<100;o+=2) sumO += o; System.out.println(sumJ); System.out.println(sumO); } } |
32. 【上机】用while和for输出1-1000之间能被5整除的数,并每行输出3个。
public class Demo { public static void main(String[] args) { int i = 1; int count=0; while(i < 1000){ if(i%5 == 0){ System.out.print(i+"\t"); count++; if(count%3 == 0) System.out.println(); } i++; } count = 0; for(i=0;i<1000;i++){ if(i%5 == 0){ System.out.print(i+"\t"); count++; if(count%3 == 0) System.out.println(); } } } } |
33. 【上机】打印九九乘法口诀表。
public class Demo { public static void main(String[] args) { for(int i=1;i<10;i++){ for(int j=1;j<=i;j++){ System.out.print(i+"*"+j+"="+(i*j)+"\t"); } System.out.println(); } } } |
34. 【上机】编程求Σ1 + Σ2 + ~~~+Σ100
public class Demo { public static void main(String[] args) { int sum = 0; for(int i=1;i<=100;i++){ for(int j=1;j<=i;j++){ sum += j; } } System.out.println(sum); } } |
35. 【上机】生成0-100随机数,直到88为止,停止循环。
public class Demo { public static void main(String[] args) { while(true){ int i = (int)(Math.random()*101); System.out.println(i); if(i == 88) break; } } } |
36.【上机】把100-150之间不能被3整除的数输出。
public class Demo { public static void main(String[] args) { for(int i=100;i<=150;i++){ if(i%3 != 0) System.out.println(i); } } } |
37.【上机】打印出实心10*10正方形,空心10*10正方形。
public class Demo { public static void main(String[] args) { for(int i=0;i<10;i++){ for(int j=0;j<10;j++){ System.out.print("*"); } System.out.println(); } for(int i=0;i<10;i++){ for(int j=0;j<10;j++){ if(i==0 || i==9 || j==0 || j==9) System.out.print("*"); else System.out.print(" "); } System.out.println(); } } } |
38.【上机】打印出实心10*10菱形和空心10*10菱形。
public class Demo { //空心菱形,实心略微改动。 public static void main(String[] args) { boolean flag = true; //前5行是真,后5行是假 int distance = 0; for(int i=0;i<11;i++){ if(i>=5) flag = false; for(int j=0;j<11;j++){ if(j == 5-distance || j==5+distance) //if(j>=5-distance || j<=5+distance) System.out.print("*"); else System.out.print(" "); } if(flag) distance++; else distance--; System.out.println(); } } } |
第三章 控制语句
1. 三种控制结构是什么?
答:顺序结构,选择结构,循环结构
2. 如果if语句后不加{},if的控制范围是否只限于第一句?
答:if语句的控制范围只能是紧接着的一句,使用{}可以将多个语句合并成为一个复合语句,进而控制多个语句。
3. Math.random()是什么意思?如果想要获取15到20之间的随机数怎么办?
答:Math.random()是使用java.lang.Math类中的静态方法random(),获取一个0-1之间的随机浮点数。想要获得15-20之间的随机数的语句: 15+(int)(Math.random()*6);
4. switch语句的功能是否可以完全使用if else if else来代替?如果是,为什么还要使用switch语句?
答:switch语句完全可以使用if else语句来代替,因为switch语句的效率比if else语句的效率高。
5. switch语句中的表达式需要是什么类型?
答:int类型(包括可以自动转为int类型的byte,short,char)
Jdk1.7以后可以使String类型和枚举类型
6. switch语句中一个case执行后,什么时候结束执行这个case语句?
答:一旦开始执行某个case语句,直到遇到break语句或者default语句或者switch语句执行完。
7. switch语句中,default是否必须写?
答:否,default语句不必要写,就像if语句不必要后面一定有else语句一样。
8. 下面代码,有什么错误?
switch (c2) { case 'y'; case 'w'; System.out.println("半元音"); break; default: System.out.println("辅音"); } |
答:case语句后面应该是冒号: 。
9. 循环结构模拟了现实世界中什么逻辑?
答:各种重复问题。
10. 循环结构的四种内部结构是什么?
答:1)while(布尔表达式){循环体;} while循环
2)do{循环体;}while(布尔表达式) do-while循环
3)for(初始化表达式;布尔表达式;步进表达式){循环体;} for循环
4)for(集合或数组中的类型 : 集合或者数组){循环体;} 增强for循环
11. while和do-whlie有什么区别?
答:while语句循环的次数为0-无限次,do-while语句循环次数是1-无数次。
12. 什么情况下会出现死循环?请举个例子。
答:循环条件始终成立,且没有可以跳出循环的语句时。while(true){System.out.println(1)}
13. for循环相比于while循环有什么优势?
答:for循环可以明确的推断出循环的次数。并且可以根据下标访问数组元素。
14. 下面代码都有什么问题?
do{ System.out.println(a); a++; }while(a<0) |
答:1)变量a没有初始化。
2)do-while语句结尾应该加上分号。
15. 下面代码有什么错误?如果有请指出错误。
for(int i=0; i<=10;i++){ System.out.println(i); } System.out.println(i); |
答:变量i超过了作用域。
16. 循环中break的作用是什么?continue的作用是什么?
答:break是用来跳出循环体的,continue是结束本次循环,进入下一次循环。
17. 语句块能否使用外部的变量?语句块中定义的变量,外部能否使用?
答:1)语句块可以使用外部的变量,因为语句块在外部变量的作用域范围内。
2)语句块中定义的变量,作用域范围为当前语句块,所以外部不能使用。
18. 方法的定义中,是否必须有返回值类型?如果确实不需要返回值,用哪个关键字来声明?
答:方法可以没有返回值类型,当方法不需要返回值时,可以使用void关键字来声明。
19. 方法的定义中,return语句是否必要,他有什么作用?
答:当方法不需要返回值时,可以没有return语句。return语句主要用来结束当前方法,并将其后的值返回给方法调用者。
20. Java中传递是值传递还是引用传递?
答:基本数据传递的是值的拷贝,引用数据类型传递的是对象地址的拷贝。
21. 方法定义中,形式参数和实际参数的区别?
答:形式参数是方法定义中的参数列表,表示该方法接受怎样的参数类型。
实际参数是方法调用时,用来传入方法的实际数据。
22. 方法定义时,使用形参还是实参?
答:形参,方法定义时,使用形参,方法调用时,使用实参。
23. 定义形参时,必须要写变量类型吗?
答:必须要写变量类型。
24. 实参类型是否必须和形参类型匹配?
答:是的,必须要和形参匹配,匹配包括当该某方法的实参类型可以自动转换为某方法的形参类型,例如,形参时int型,实参是short类型的,这种情况是匹配的。
25. 什么是方法的重载,有什么用?
答:在同一个类中,方法名相同,参数列表不同。方法重载的作用:多态。
26. 两同三不同指的是?返回值不同构成重载吗?形参名称不同构成重载吗?
答:两同指的是同一个类,同一方法名,三不同指的是参数列表的类型,个数和顺序不同。返回值不同和形参名称不同均不构成重载。
27. 递归算法中,递归头和递归体分别指的是什么?
答:递归头指的是递归终止的部分,递归体是自己调用自己的部分。
28. 递归算法的优点是什么?递归算法的缺点是什么?
答:递归算法的优点是算法简单(将复杂的问题拆解成简单的问题),缺点是效率低(递归算法大量的开辟方法栈和关闭方法栈,大量占用资源)。
29.【上机】使用递归算法完成阶乘算法。
public class Demo { public static void main(String[] args) { int i = factorial(10); System.out.println(i); } public static int factorial(int n){ if(n ==1 ) return 1; return n*factorial(n-1); } } |
30. 【上机】根据随机生成的月份,打印该月份的天数。(不考虑闰年)。
public class Demo { public static void main(String[] args) { int month = (int)(Math.random()*12)+1; System.out.print(month+"月天数为:"); if(month == 2) System.out.println(28); else if(month==4 || month==6 || month==9 || month==11) System.out.println(30); else System.out.println(31); } } |
31. 【上机】用while循环和for循环分别计算100以内的奇数和及偶数和。
public class Demo { public static void main(String[] args) { int j = 1; /*奇数计算*/ int o = 2; /*偶数计算*/ int sumJ = 0; /*奇数和*/ int sumO = 0; /*偶数和*/ while(j < 100){ sumJ += j; j+=2; } for(;o<100;o+=2) sumO += o; System.out.println(sumJ); System.out.println(sumO); } } |
32. 【上机】用while和for输出1-1000之间能被5整除的数,并每行输出3个。
public class Demo { public static void main(String[] args) { int i = 1; int count=0; while(i < 1000){ if(i%5 == 0){ System.out.print(i+"\t"); count++; if(count%3 == 0) System.out.println(); } i++; } count = 0; for(i=0;i<1000;i++){ if(i%5 == 0){ System.out.print(i+"\t"); count++; if(count%3 == 0) System.out.println(); } } } } |
33. 【上机】打印九九乘法口诀表。
public class Demo { public static void main(String[] args) { for(int i=1;i<10;i++){ for(int j=1;j<=i;j++){ System.out.print(i+"*"+j+"="+(i*j)+"\t"); } System.out.println(); } } } |
34. 【上机】编程求 + + +~~+ 。
publicclass Demo { publicstaticvoid main(String[] args) { intsum = 0; for(inti=1;i<=100;i++){ for(intj=1;j<=i;j++){ sum += j; } } System.out.println(sum); } } |
35. 【上机】生成0-100随机数,直到88为止,停止循环。
publicclass Demo { publicstaticvoid main(String[] args) { while(true){ inti = (int)(Math.random()*101); System.out.println(i); if(i == 88) break; } } } |
36.【上机】把100-150之间不能被3整除的数输出。
publicclass Demo { publicstaticvoid main(String[] args) { for(inti=100;i<=150;i++){ if(i%3 != 0) System.out.println(i); } } } |
37.【上机】打印出实心10*10正方形,空心10*10正方形。
publicclass Demo { publicstaticvoid main(String[] args) { for(inti=0;i<10;i++){ for(intj=0;j<10;j++){ System.out.print("*"); } System.out.println(); } for(inti=0;i<10;i++){ for(intj=0;j<10;j++){ if(i==0 || i==9 || j==0 || j==9) System.out.print("*"); else System.out.print(" "); } System.out.println(); } } } |
38.【上机】打印出实心10*10菱形和空心10*10菱形。
publicclass Demo { //空心菱形,实心略微改动。 publicstaticvoid main(String[] args) { booleanflag = true; //前5行是真,后5行是假 intdistance = 0; for(inti=0;i<11;i++){ if(i>=5) flag = false; for(intj=0;j<11;j++){ if(j == 5-distance || j==5+distance) //if(j>=5-distance || j<=5+distance) System.out.print("*"); else System.out.print(" "); } if(flag) distance++; else distance--; System.out.println(); } } } |