Java程序设计(2021春)——第一章课后题(选择题+编程题)答案与详解

Java程序设计(2021春)——第一章课后题(选择题+编程题)答案与详解

第一章选择题

Tip:选择题部分我只针对部分我出错的或我认为有价值的题目在此整理。

1.1 Java与面向对象程序设计简介

T4
题面

面向对象技术给软件发展带来的益处有:

(1) 一个设计好的类,可以在后续开发中被部分或者全部的重复使用

(2) 每个类可以作为一个独立单元进行测试维护,大量代码来源于成熟可靠的类库,因此开发新程序时的新增代码明显减少,使程序更加可靠

(3) 有利于提高用户对类的修改和数据的控制,使得开发更加便捷。

A(1) (2) (3)

B(1) (2)

C(1) (3)

D(2) (3)

答案

B

详解

笔者不知道这个题目(3)为什么不对,先放在这以后学的过程中再体会(逃

T9
题面

Java的主要优点是()(多选)

A直接操作内存,功能强大

B一次编译,到处运行

C纯面向对象的语言

D可以通过拖拽的方式快速开发用户界面

答案

BC

详解

RT

T10
题面

下面有关JAVA代码安全性的叙述错误的是()

A字节码校验器加载查询执行所需的所有类

B运行时由解释器执行代码

C运行时,字节码被加载,验证,然后在解释器中执行

D类加载器通过分离本机文件系统的类和从网络导入的类增加安全性

答案

A

详解

思考.jpg(笔者查了一下也不是很清楚,mark一下以后学到的时候回来看)

T11
题面

下面说法正确的是()

A JAVA程序的源文件名称与主类的名称相同,后缀可为.java或者.txt

B JDK的编译命令为java

C一个JAVA源程序编译后,可能产生几个字节码文件

D在DOS命令行下编译好字节码文件后,只需输入程序名即可运行该程序

答案

C

详解

A选项后缀应为.java

B选项编译命令应为javac

C选项正确

D选项显然不正确

T15
题面

设HelloWord的代码为:

class HelloWord{
	public void main(String a[]){
		System.out.println("hello world");
	}
}

下面说法正确的是:

A HelloWord.java无法通过编译,因为main方法的声明方式不对

B HelloWord.java可以通过编译,但是运行该程序会出现异常,不会打印HelloWorld

C HelloWord.java可以通过编译,但是无法运行,因为该文件没有public类

D HelloWord.java可以通过编译并正常运行,结果输出hello world

答案

B

详解

笔者查了一下资料,不是很清楚,先mark住(逃


1.2 基本数据类型与表达式

T12
题面

在某个main()方法中有以下代码:

String s1,s2;
int[] numbers;
int num;
num=15;
boolean b=false;

下面哪个说法是正确的()

A 声明了1个基本类型变量和2个引用变量

B 声明了2个基本类型变量和2个引用变量

C 声明了2个基本类型变量和3个引用变量

D 声明了3个基本类型变量和3个引用变量

答案

C

详解

以笔者目前掌握知识来看,String声明了s1,s2两个引用变量int[]声明了一个引用变量intboolean分别声明了一个基本类型变量

Tip: Java中的基本类型变量有boolean,byte,char,double,float,int long short

T14
题面

关于数据类型的声明,以下声明正确的是:

1byte a = 129;2long b = 129F;3float c = 1.234F;4short d = 1.2;5boolean e = true;6float f = 1.234D;

A(1)(3)(4)(5)

B(3)(5)

C(2)(3)(6)

D(1)(5)(6)

答案

B

详解

声明数值型变量有如下规则

数据类型文字量
byte,short,int十进制数,开头不为00X跟十六进制数,如0XF1C40跟八进制数,如0726
long同上,但后面再跟一个lL,如84l0X1F39L
float数字后跟f或F,如1.2456F1.893E2F
double后面可选d或D做后缀,如:1.23D
booleantruefalse

数值型变量范围如下

类型说明长度最小值最大值
byte带符号微整数8位-128127
short带符号短整数16位-215215-1
int带符号整数32位-231231-1
long带符号长整数64位-263263-1
float单精度浮点数32位-2-149(2-2-23)·2127
double双精度浮点数64位-2-1074(2-2-52)·21023

(1):超出byte范围,错。

(2):long型变量末尾跟lL,不是F

(3):正确。

(4):short声明为整型,1.2不是整型,错。

(5):正确。

(6):float型变量末尾跟f'F,不跟D


1.3数组

T1
题面

(1) 数组可以动态初始化

(2) 数组可以赋值给Object类型的对象

(3) 数组创建以后,其长度可以修改

(4) 数组可以调用Object类的所有方法

A (1)(2)(3)(4)

B (1)(2)(4)

C (2)(3)(4)

D (2)(4)

答案

B

详解

java中数组的长度不可以改变。java中的数组的定义就是相同类型,固定长度的一组数据,一旦被初始化,长度不可更改。

Tip:底层原理笔者还不是很清楚,但是考虑到C和Java的相似性,数组应该也是申请一块连续的空间,所以这样的话数组的长度如果再更改就不合适了。

T4
题面

关于二维数组的创建,以下做法正确的是:

1int a[][] =new int[4][5]2int a[][] =new int[4][]; a[0]=new int[10]; a[1]=new int[20];3int a[][]; a=new int[3][]; a[0]=new int[3]; a[1]={1,2};a[2]={1,2,3};

A (1)(2)(3)

B (1)(2)

C (1)(3)

D (1)

答案

B

详解

(1):声明数组的引用的同时指明元素的个数并且分配内存空间。

(2):二维数组的本质是一维数组再多一维,我们允许这样操作。

(3):语法int[] a = {1,2}仅允许出现在定义数组变量时使用,如果数组变量已经创建了,之后再修改它,就不能使用这种语法了。


1.4算法的流程控制

T7
题面

下面关于switch语句错误的是:

A 在同一个switch语句中,case后的值可以相同

B 没有break语句,也能编译运行

C default语句可有可无

D switch语句中表达式的值可以是String类型

答案

A

详解

case后跟的值不可以相同,否则会报错,有逻辑问题。


第一章编程练习题(1.5)


T1 Pow函数

题面

实现x的n次方,x为类型为double,n的类型为int. 给定输入为x n, 输出x的n次方结果。

样例输入:

0.2

5

样例输出:

0.00032

思考和详解

本题作为这门课程第一个编程题,在提交代码方式上就卡住了我,我在这里分享一下我踩过的坑供大家参考。

  1. 提交代码到oj上时要将package hello;之类的包删去,本条对所有评测Java语言的oj均有效1

  2. 在一般oj上,我们提交Java代码的要求往往是形如以下1

    public class Main {//此处须为Main,否则编译无法通过
    	public static void main(String[] args){
    		/*TO DO*/
    	}
    }
    
  3. 值得注意的是,在学堂在线oj中,提交的代码应当以如下两种形式之一呈现1

    没有输入

    class Main {//此处须为Main,否则编译无法通过
    	public static void main(String[] args){
    		/*TO DO*/
    	}
    }
    
    

    有输入

    import java.util.Scanner;
    class Main {//此处须为Main,否则编译无法通过
    	public static void main(String[] args){
            Scanner in = new Scanner(System.in);
    		/*TO DO*/
    	}
    }
    

    即,学堂在线oj特别地要求删去public1

具体代码
/*这份代码在学堂在线oj获得了40分,我不知道问题出在,思路和代码本身应该是正确的,猜测可能是格式化输出有差别,但是题目又没有说清楚,所以我没有继续尝试。有兴趣的朋友如果知道这个题怎么写可以满分可以评论告诉我或者私信联系我*/
import java.util.Scanner;

public class pow {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		double x,ans;
		int n;
		x = in.nextDouble();
		n = in.nextInt();
		ans = x;
		for(int i = 1;i < n;i++) {
			ans *= x;
		}
		if(n == 0)ans = 1.0;
		System.out.print(ans);
	}
}

T2 哈密顿距离

题面

两个整数的哈密顿距离定义为两个数二进制位的个数。给定两个32位整数,M,N,输出M和N的哈密顿距离。输入以空格切分。

样例输入:

3 4

样例输出:

3

样例解释:

3的二进制为011, 4的二进制为100,不同位的个数为3。

思考和详解

本题按照题意模拟即可,可能需要补码相关知识,建议没学习前置课程《C语言程序设计》的同学自学相关内容。(Tip:位运算基础题目中可能会反复利用到本题循环中的工具变量,没接触过相关知识的同学可以留意一下)

具体代码
/*提交代码时应当按照“T1思考和详解”中相关要求进行格式修正*/
import java.util.Scanner;

public class hamilton {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int a,b,c,d = 1,ct = 0;
		a = in.nextInt();
		b = in.nextInt();
		c = a ^ b;
		for(int i = 1;i <= 32;i++) {//在Java中,可以在for中定义变量,这是区别于C的一个小特点
			if((c & d) == 1)
				ct++;
			c >>>= 1;
		}
		System.out.println(ct);
	}
}

附:T1思考和详解


T3 组三角形

题面

给定一个长度为N的非负整数数组,现在以数组中的三个数为边长,组成一个三角形,计算能组成三角形的个数。输入为2行,第一行为N,第二行为N个整数,输出为三角形个数

样例输入:

4

2 2 3 4

输出:

3

样例解释:

2,3,4(第一个2),2,3,4(第二个2),(2,2,3)

思考和详解

本题可直接采用最朴素的思路:三重循环遍历每组数据,若某组数据均满足两边之和大于第三边则为所需。

具体代码
/*提交代码时应当按照“T1思考和详解”中相关要求进行格式修正*/
import java.util.Scanner;

public class triangle {
	public static void main(String[] args){
		int n,ct = 0;
		Scanner in = new Scanner(System.in);
		n = in.nextInt();
		int num[] = new int[n];
		for(int i = 0;i < n;i++) {
			num[i] = in.nextInt();
		}
		for(int i = 0;i < n;i++) {
			for(int j = i + 1;j < n;j++) {
				for(int k = j + 1;k < n;k++) {
					int a,b,c;
					a = num[i];
					b = num[j];
					c = num[k];
					if(a + b > c&&a + c > b&&b + c > a)
						ct++;
				}
			}
		}
		System.out.println(ct);
	}
}

附:T1思考和详解

注:


  1. 作为Java萌新(从C转来的纯萌新)我也不知道为什么这样 ↩︎ ↩︎ ↩︎ ↩︎

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
Java是一门广泛应用于软件开发、网站开发、移动应用开发等领域的编程语言,因其跨平台、直观易学、安全可靠等特点受到了众多开发者的喜爱和广泛应用。针对Java程序员的招聘中,笔试是很常见的一部分,尤其是选择题。那么本篇文章将针对Java笔试选择题答案进行详细解析。 1. 下列哪个不是Java中的访问修饰符 A. public B. protected C. private D. default 答案:D. default。 解析:Java中的访问修饰符有4种,分别是public、protected、private、default。其中default也称为不加修饰符,表示只有在同一个包内才可以访问。 2. 下列哪个方法是Object类中的方法 A. toString() B. equals() C. clone() D. getClass() 答案:A. toString()。 解析:Object类是Java中所有类的基类,因此所有的Java对象都可以使用Object类中的方法。其中,toString()方法返回该对象的字符串表示。 3. 下列哪个不是Java中的循环语句 A. for B. while C. loop D. do-while 答案:C. loop。 解析:Java中的循环语句有3种,分别是for、while、do-while。 4. 下列哪种数据类型属于引用数据类型 A. int B. double C. char D. String 答案:D. String。 解析:Java中的数据类型分为基本数据类型和引用数据类型。基本数据类型包括byte、short、int、long、float、double、char、boolean,而引用数据类型包括数组、类、接口、枚举、String等。 5. 下列哪个关键字可以作为Java中的异常处理语句 A. try B. catch C. finally D. all of the above 答案:D. all of the above。 解析:Java中的异常处理语句通常由try、catch和finally三部分组成,它们分别表示尝试执行可能引发异常的语句、捕获异常并进行处理、最终要执行的语句。 综上所述,Java笔试选择题答案是在企业招聘中常见的一部分,掌握Java基础知识对于通过笔试至关重要。希望广大Java程序员在准备笔试时,能够认真思考每个问答案,巩固自己的Java基础,提高笔试通过率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值