《Java程序设计基础习题答案(63页).doc》由会员分享,可在线阅读,更多相关《Java程序设计基础习题答案(63页).doc(65页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-Java程序设计基础课后习题参考答案第2章1. 关于Java Application 的入口方法main()的检验:main()方法的参数名是否可以改变?main()方法的参数个数是否可以改变?该方法名是否可以改变?参考答案:(1)main()方法的参数名可以改变。(2)main()方法的参数个数不可以改变。(3)该方法名不可以改变。2. 当一个程序没有main()方法时,能编译吗?如果能编译,能运行吗?参考答案:当一个程序没有main()方法是,是可以编译通过的,但是不能给运行,因为找不到一个主函数入口。3. 下列语句能否编译通过?byte i = 127;byte j = 128;lon
2、g l1 = 999999;long l2 = 9999999999;参考答案:byte i 和 long l1可以编译通过。而 byte j 和long l2 超出自身数据类型范围,所以编译失败。4. 下列语句能否编译通过?float f1 = 3.5;float f2 = 3.5f;参考答案:java中浮点型的数据在不声明的情况下都是double型的,如果要表示一个数据是float型的,必须在数据后面加上“F”或“f”;因此,float f1 无法编译通过。5. 验证int 和char,int和double等类型是否可以相互转换。参考答案:(1)char类型可以转换为int 类型的,但是i
3、nt类型无法转换为char类型的;(2)int 可以转换为 double类型的,但是double类型无法转换为int 类型的。6. 计算下列表达式,注意观察运算符优先级规则。若有表达式是非法表达式,则指出不合法之处且进行解释。(1) 4+5 = 6*2(2) (4=5)/6(3) 9%2*7/317 (4) (4+5)=10%2参考答案:表达式(2)为不合法表达式,只能将值赋值给一个变量,因此其中(4=5)将5赋值给4是不合法的。7. 下列()是合法的Java标识符。(1) Counter1 (2) $index,(3) name-7 (4) _byte(5) larray(6) 2i(7)
4、try (8) integer参考答案:Java标识符由数字,字母和下划线(_),美元符号($)组成。在Java中是区分大小写的。而且还要求首位不能是数字。最重要的是,Java关键字不能当作Java标识符。因此,(1)、(4)、(5)、(8)是合法标识符。8. 下列各项中定义变量及赋值不正确的是()(1) int I = 32;(2) float f = 45.0;(3) double d = 45.0;参考答案:(2)不正确,选项(2)定义 float 类型时必须在数据后面加上“F”或“f”。9. Java语言中,整型常数123占用的存储字节数是()(1) 1 (2) 2 (3) 4 (4)
5、 8参考答案:正确选项是(3), Java语言中,默认整型数占用4个字节数。10. 以下代码的编译运行结果是 public class Testpublic static void main(String args) int age; age = age + 1; System.out.println(“the age is “ + age);(1) 编译通过,运行无输出(2) 编译通过,运行结果为 “the age is 1”(3) 编译通过但运行时出错(4) 不能通过编译参考答案:(4)为正确选项。Java 在使用变量前应该先初始化。11. 写出下列表达式的运行结果(1) 6+33&6=6
6、&124(5)7+124&12-42参考答案:(1) false;(2) 6;(3) 12; (4) fale;(5) false;(6) 5;第3章1. 编码验证i+和+i的区别。参考答案:+i 和 i+在单独使用时, 就是 i=i+1。而 a = +i, 相当于 i=i+1; a = i; (先 i = i + 1,再使用 i 的值),而 a = i+,相当于 a = i; i=i+1; (先使用 i 的值,再 i = i + 1)。2. 写出下面表达式的结果(1)5/3 (2)5/3.0 (3)5%3 (4)5%-3参考答案: (1)1 (2)1.6666666666666667(3)2
7、(4)23. 考虑如下的Test.java,并指出错误原因。程序清单:Test.javaclass Test public static void main(String args) byte b = 5; b = (b 2); System.out.println(b); 参考答案:b=(b-2);错误,在进行b-2时,运算结果类自动提升为int,而b是byte类型,编译的时候会报错,因为存在高类型数据向低类型数据转化的风险。而byte b=5;是正确的,因为在编译的时候就能够确定5在byte允许的范围内,虚拟机在编译时做了一定的优化处理。4. 考虑一下对于ifelse语句,还有没有更简洁的
8、写法。例如:if( x 0 ) y = x; else y = -x; 可以简写成什么?参考答案:y=x0?x:-x;5. 给定N,编程实现打印N*N的乘法表。参考答案:public static void main(String args) int a = 0, b = 0, c = 0; for(int i=0; i9; i+) a=i+1; for(int j=0;ji+1;j+) b = j+1; c = a*b; System.out.print(a + * + b + = + c + ); System.out.println( ); 6. 将下列语句转换成Java代码:(1)如果
9、b1为真,打印“one”,否则打印“two”。(2)如果b1为假并且b2为真,打印“one”,否则打印“two”。(3)如果b1为假,并且如果b2为真则打印“one”,如果b2为假则打印“two”;否则打印“three”。参考答案:(1) if(b1=true) System.out.print(one); else System.out.print(two); (2)if(b1=false & b2 =true) System.out.print(one); else System.out.print(two); (3)if(b1=false & b2 =true) System.out.p
10、rint(one); else if (b1=false & b2 =false) System.out.print(two); else System.out.print(three);7. 找出如下各项中的语法错误:(1)for(int k=0;k100;k+) System.out.println(k)(2)for(int k=0;k100;k+); System.out.println(k);(3)int k=0 while k100 System.out.println(k);k+;(4)int k=0;doSystem.out.println(k);k+; while k100;参
11、考答案:(1)for(int k=0;k100;k+) System.out.println(k);(2)for(int k=0;k100;k+) System.out.println(k);(3)int k=0; while (k100 )System.out.println(k);k+;(4)int k=0;doSystem.out.println(k);k+; while (k100);8. 写出三个不同的循环for、while和do-while循环,打印出从0(包括0)开始直到1000的所有10的倍数。参考答案:(1) int n=0;while(n=1000 & n%10=0) Sy
12、stem.out.print(n); n+;(2)int n=0do if(n%10=0) System.out.print(n); n+;while(n1000);(3)for(int n=0;n=0);if (read.hasNextInt() n = read.nextInt();if (n 0)continue;break; else read.next();for (int i = 0; i n; i+) for (int j = 1; j n - i; j+)System.out.print( );for (int j = 0; j i * 2 + 1; j+)System.out
13、.print(*);for (int j = 1; j = 0; i-) for (int j = 1; j n - i; j+)System.out.print( );for (int j = 0; j i * 2 + 1; j+)System.out.print(*);for (int j = 1; j n - i; j+)System.out.print( );System.out.println();10. 写出下面程序的输出结果:public class TestWhile public static void main(String args) int a=0; while(+a=
14、100) if (a%9)=0) System.out.print(a+t); System.out.println(); 参考答案:9 18 27 36 45 54 63 72 81 90 99第4章1. 比较String和StringBuffer的区别,并说明什么时候适合使用StringBuffer。参考答案:在Java中,String被完全当成一个对象,一个String对象是组成这个字符串的字符序列,加上用来操作字符串的方法。字符串一旦被创建,就不能改变它的值。StringBuffer类同样能够表示一串字符。但是,与String类不同,一个StringBuffer类能够被修改,Strin
15、gBuffer类维护的是一个字符缓冲区,在必要时它的长度能够增长和缩短。对任何涉及修改字符串的任务,应该用StringBuffer代替String。2. 说明=和equals的区别,并举例。参考答案:=操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。equals 操作表示的是两个变量是否是对同一个对象的引用,即堆中的内容是否相同。=比较的是两个对象的地址,而equals比较的是两个对象的内容。3. 假定s是字符串字面值“exercise”,找出下列表达式有语法错误的并改正:(1)s.charAt(hello)(2)s.indexO
16、f(er)(3)s.substring(5) (4)s.lastIndexOf(er)(5)s.length()参考答案:其中(1)和(4)表达式有语法错误。(1) charAt(int) 参数是int 类型的;(4)lastIndexOf() 中的参数应该为int 或者 String ,这里的er 既不是int 也不是String。4. 给定一个句子,统计单词中字母的出现次数(字母不区分大小写,全部按照小写计算)。参考答案:参考代码import java.util.Scanner; public class countChar public static void main(String a
17、rgs) /输入需要检测的字符串System.out.print(Input String :);Scanner str0 = new Scanner(System.in);String s = str0.next();System.out.println(the String is : + s);s = s.toLowerCase();/将字符串转换为小写/输入需要统计的字符System.out.print(Input char :);Scanner str1 = new Scanner(System.in);String s1 = str1.next();char c = s1.charA
18、t(0);System.out.println(Input char is : + c);int count = 0;/统计出现次数变量for (int i = 0; i s.length(); i+) char ch = s.charAt(i);if (ch = c) count+;System.out.println(The times is : + count);5. 执行String s = new String(xyz);这一语句,共创建几个String对象?参考答案:两个。xyz本身是一个字符串对象,而new String()也会创造一个字符串对象。6. 对于语句String s
19、= hello; 下面那个表达式是合法的?(1)s += 5;(2)char c = s1(3)int len = s.length;(4)String t = s.toLowCase;参考答案:(1)为合法的。7. String和StringBuffer中的哪个方法能改变调用该方法的对象自身的值?(1)String的charAt()(2)String的replace()(3)String的toUpperCase()(4)StringBuffer的reverse()参考答案:(4)StringBuffer的reverse()可以改变对象自身的值。8. 假定s是字符串字面值“exercise”,
20、计算下面每个表达式的值:(1)s.charAt(5)(2)s.indexOf(er)(3)s.substring(5)(4)s.lastIndexOf(e)(5)s.length()参考答案:(1)i;(2)2;(3)ise;(4)0;(5)8;9. 写出下面程序的输出结果:public class StringExample public static void main(String args) String str = new String(abcd); String str1 = abcd; String str2 = new String(abcd); System.out.prin
21、tln(str = str1); System.out.println(str = str2); System.out.println(str1 = str2); System.out.println(str.equals(str1); System.out.println(str.equals(str2); System.out.println(str1.equals(str2); System.out.println(str = str.intern(); System.out.println(str1 = str1.intern(); System.out.println(str.int
22、ern() = str2.intern(); String hello = hello; String hel = hel; String lo = lo; System.out.println(hello = hel + lo); System.out.println(hello = hel + lo); 参考答案:falsefalse false true true true false true true true false 10. 编写程序,将字符串“aabbcdefg”中每个字符作加2操作,最后结果为“ccddefghi”。参考答案:参考代码public class Char pu
23、blic static void main(String args) String s = aabbcdefg;char ch = s.toCharArray();for (int i = 0; i ch.length; i+) chi = (char) (chi + 2);ch.toString();System.out.println(ch);第5章1. 编写一个程序,计算出前10个平方数(例如1,4,9,16),并将这10个数保存到一个整型数组中,将数组中的所有元素输出到控制台,验证程序是否正确。要确保数组有10个元素,并且元素值的范围是1100.参考答案:public static v
24、oid main(String args) int b = new int10;for (int i=1; i 11; i+) bi = i * i;for (int i = 0; i 10; i+) System.out.println(ai);2. 声明一个数组,其中的元素为37,47,23,-5,19,56,然后创建一个新数组,将前一个数组的内容复制到后一个数组中。参考答案:public static void main(String args) int a = 37,47,23,-5,19,56;int b = new inta.length;for(int i = 0; i a.le
25、ngth; i+)bi = ai;for(int j = 0; j b.length; j+)System.out.print(bj+ );3. 从命令行输入5个整数到数组a中,分别输入33、55、22、66及77。求偶数的个数及其和。参考答案:示例代码:public static void main(String args) int a = new int5;int count = 0;int sum = 0;for (int i = 0; i a.length; i+) System.out.print(请输入数组中的元素:);Scanner read = new Scanner(Syst
26、em.in);ai = read.nextInt();if (i % 2 != 0) count+;sum = sum + ai;System.out.println(偶数个数是: + count);System.out.println(偶数的和是: + sum);4. 从命令行输入一个字符串“JavaServlet”,将每个字符存入a数组。(1)大写字母有几个?分别是那几个?(2)小写字母有几个?分别是那几个?(3)将小写字母转换成大写字母,大写字母转换成小写字母。参考答案:public static void main(String args) if(args0 != ) String i
27、nputString = args0;int countLower = 0;int countUpper = 0;String strLower = ;String strUpper = ;for (int i = 0; i inputString.length(); i+)char c = inputString.charAt(i);if (Character.isUpperCase(c) countUpper+;strUpper += c + ; else if (Character.isLowerCase(c) countLower+;strLower += c + ;System.ou
28、t.println(大写字母有 + countUpper + 个,分别是: + strUpper);System.out.println(小写字母有 + countUpper + 个,分别是: + strLower);5. 阅读下面代码: int ages = new int10; System.out.println(ages9); 下面关于上面两行代码的说法哪一个正确的?(1)编译时发生错误(2)编译通过,运行时发生错误,因为局部变量在没有初始化情况下,不能使用(3)编译通过,执行之后向控制台输出结果为0(4)编译通过,执行时提示发生数组越界的错误参考答案:(3)为正确选项。6. 阅读下面
29、代码:public class AClass public static void main(String args) String msg = one,two,three,four; if(args.length=0) System.out.println(No arguments); else System.out.println(msgargs.length+ arguments);下面哪个选项的说法是正确的? (1)该代码无法编译通过(2)不带任何参数运行该程序时,会抛出NullPointerException异常(3)分别带0个参数、3个参数运行该程序时,会打印No argument
30、s和two arguments(4)分别带0个参数、3个参数运行该程序时,会打印No arguments和four arguments参考答案:(4)为正确选项。6. 从命令行输入八个参数,并以气泡法排序后保存在a数组中,然后再输入一个查找键值Key,按顺序查找判断该键值是否存在与a数组中。参考答案:参考代码:public static void main(String args) int i, j, t, temp;int array = new int8;System.out.println(输入8个整数:); /* 输入8个整数 */for (i = 0; i array.length;
31、 i+) System.out.print(请输入:);Scanner read = new Scanner(System.in);arrayi = read.nextInt();/* 冒泡排序 */for (i = 0; i i; j-)if (arrayj arrayj - 1) t = arrayj;arrayj = arrayj - 1;arrayj - 1 = t;/* 输出排序后的数组元素 */for (i = 0; i array.length; i+) System.out.print(arrayi + );System.out.println(输入一个整数作为键值Key: )
32、;Scanner read = new Scanner(System.in);temp = read.nextInt();for (i = 0; i array.length & temp = arrayi; i+) /* 在排序后的数组中查找 */if (temp = arrayi) System.out.printf(array%d 是您所找的数.n, i); /* 在数组中有可能有相等的元素 */ else if (temp != arrayi - 1) System.out.printf(数组中没有您想找的数.);/* 数组中没有所输入的数 */8. 现有一个长度为49的整型数组a49
33、,不重复的将1-50之中49个数依次赋值给该数组,编写程序找出没有放进该数组的是哪个数?参考答案: public static int findNum(int a) int numFound = 0;Arrays.sort(a);System.out.println(Arrays.toString(a);for (int i = 0; i 50; i+) if (ai != (i + 1) numFound = i+1;break;return numFound;第6章1. 指出下面声明中的语法错误(如果有)。记住,域声明的某些部分是可选的。(1)public boolean isEven;(
34、2)private boolean isEven;(3)private boolean is Odd;(4)public boolean is Odd;(5)string S;(6)private boolean even = 0;(7)private String s = helloWorld;参考答案:(3)和(4)均存在变量名命名错误;(5)string并不是一个类型,应为String。(6)布尔类型变量的值应该为“true”或者“false”,不应该为整型。(7)helloWorld不是一个字符串,必须用双引号,如:”helloWorld”。2. 写出下列实例变量的声明:(1)名为bo
35、ol的私有boolean型变量,初始值为真。(2)名为str的公共string型变量,初始值为“hello”。(3)名为nEmployees的私有int型变量,没有初始值。参考答案:(1)private Boolean bool = true; (2)public String str = “hello”;(3)private int nEmployees;3. 创建如下类:Circle类(圆形),Square类(正方形)和Point类(点)。Point根据(x,y)坐标定位。Cricle除了一个(x,y)坐标之外,还有半径属性。正方形除了一个(x,y)坐标之外,还有边长。请问这些类中那些是超
36、类,那些是子类?参考答案:Point类(点)为超类,而Circle类(圆形)和Square类(正方形)为子类。4. 关键字组合问题:(1)abstract方法能否是final类型的?(2)abstract方法能否是static类型的?(3)能否定义一个私有静态(private static)方法?参考答案:(1)abstract不能用final 修饰符修饰;(2)abstract方法不能是static类型的;(3)不能定义一个私有静态方法。5. 阅读下面代码:1.public class Test 2.void test(short s) 3. System.out.println(I am
37、an int); 4. 5.void test(byte b) 6.System.out.println(I am a string); 7. 8.9.public static void main(String args) 10. Test t=new Test(); 11. char ch=y; 12. t.test(ch); 13. 14.下面对于上述代码的描述哪个是正确的?(1)第5行无法编译,因为void方法不能被重载(overridden)(2)第12行无法编译,因为没有定义可以接受char类型参数的方法(3)代码可以编译,但执行时在12行会抛出异常(4)代码可以编译,并且执行之后
38、的输出结果为:I am an int参考答案:(2)为正确参考答案。6. 阅读下面代码,请确定a、b、c、d中的哪一个说法是正确的? class A int value1; class B extends A int value2; (2)类A扩展了类B(2)类B是类A的父类(3)类B是类A的子类(4)类A的对象实例中,存在一个名字为value2的成员变量参考答案:(3)为正确参考答案。7. 在如下源代码文件Test.java中, 哪个是正确的类定义?(1)public class test public int x = 0; public test(int x) this.x = x; (2
39、)public class Test public int x=0; public Test(int x) this.x = x; (3)public class Test extends T1, T2 public int x = 0; public Test (int x) this.x = x;(4)protected class Test extends T2 public int x=0; public Test(int x) this.x=x; 参考答案:(2)为正确参考答案。8. 描述静态代码块、非静态代码块与构造函数的执行顺序。参考答案:(静态代码块非静态代码块构造方法)。9. 请用代码实现一个计算方法calc(),该方法接受两个参数,返回值为两个参数的和,并且返回值类型与传入的参数类型一致,例如:c