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

题面

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

(1) byte a = 129;

(2) long b = 129F;

(3) float c = 1.234F;

(4) short d = 1.2;

(5) boolean e = true;

(6) float 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
boolean truefalse

数值型变量范围如下

类型 说明 长度 最小值 最大值
byte 带符号微整数 8位 -128 127
short 带符号短整数 16位 -215 215-1
int 带符号整数 32位 -231 231-1
long 带符号长整数 64位 -263 263-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

题面

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

(1)int a[][] =new int[4][5]

(2)int a[][] =new int[4][]; a[0]=new int[10]; a[1]=new int[20];

(3)int 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:1]

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

    没有输入

    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特别地要求删去public[1:3]

具体代码

/*这份代码在学堂在线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转来的纯萌新)我也不知道为什么这样

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

  1. 20145330《Java学习笔记》第一章课后练习8知识总结以及IDEA初次尝试

    20145330<Java学习笔记>第一章课后练习8知识总结以及IDEA初次尝试 题目: 如果C:\workspace\Hello\src中有Main.java如下: package cc ...

  2. 谭浩强 c++程序设计第一章课后习题 第10题

    #include <iostream> using namespace std; int main() { int a,b,c; cout<<"请输入三个整数类型的数 ...

  3. 谭浩强 c++程序设计第一章课后习题 第7题

    #include <iostream> using namespace std; int main() { int a,b,c; int f(int x,int y,int z);//这是 ...

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

    Java程序设计(2021春)--第二章课后题(选择题+编程题)答案与详解 目录 Java程序设计(2021春)--第二章课后题(选择题+编程题)答案与详解 第二章选择题 2.1 面向对象方法的特性 ...

  5. Java程序设计(2021春)——第四章接口与多态课后题(选择题+编程题)答案与详解

    Java程序设计(2021春)--第四章接口与多态课后题(选择题+编程题)答案与详解 目录 Java程序设计(2021春)--第四章接口与多态课后题(选择题+编程题)答案与详解 第四章选择题 4.0 ...

  6. 《Java程序设计》第四章-认识对象

    20145221<Java程序设计>第四章-认识对象 总结 教材学习内容总结 类与对象 定义:对象是Java语言中重要的组成部分,之前学过的C语言是面向过程的,而Java主要是面向对象的. ...

  7. 《Java程序设计》第三章-基础语法

    20145221<Java程序设计>第三章-基础语法 总结 教材学习内容总结 类型.变量与运算符 类型 Java可区分为基本类型(Primitive Type)和类类型(Class Typ ...

  8. 《Java 程序设计》课堂实践项目 课后学习总结

    <Java 程序设计>课堂实践项目 课后学习总结 String类的使用(sort) 目录 Linux命令(sort) 课堂实践 课后思考 学习老师的代码之后的思考:int与Integer ...

  9. “全栈2019”Java第一百零一章:局部内部类覆盖作用域内成员详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. 005.Python条件if语句

    一  流程控制 流程控制的定义 流程:代码执行的过程 流程控制:对代码执行过程的管控 流程控制三大结构: 顺序结构:从上到下,代码依次执行 分支结构: 一共4个 循环结构:while for 分支结构 ...

  2. Spring Cloud Alibaba系列之分布式服务组件Dubbo

    本博客的例子代码可以在github找到下载链接:代码下载 SpringBoot.SpringCloud Alibaba系列博客专栏:链接 1.分布式理论 1.1.分布式基本定义 <分布式系统原理 ...

  3. Linux 安装配置 tftp 服务器

    1.安装TFTP服务 安装服务端 sudo apt-get install tftpd-hpa 安装客服端 sudo apt-get install tftp-hpa 2.创建TFTP服务器目录 cd ...

  4. Java日期时间API系列38-----一种高效的工作日计算计算方法

    如果没有节日放假调休的话,工作日很好计算,周一到周五就是工作日,但因为有节日放假调休,使得这个计算需要外部放假安排数据来支持.计算原理: 先按照放假安排数据计算,再按照周一周五计算. 下面以Local ...

  5. [leetcode] 36. 有效的数独(Java)

    没啥好说的,直接上就行 36. 有效的数独 class Solution { public boolean isValidSudoku(char[][] board) { Map<Charact ...

  6. Step By Step(Lua字符串库)

    Step By Step(Lua字符串库) 1. 基础字符串函数:    字符串库中有一些函数非常简单,如:    1). string.len(s) 返回字符串s的长度:    2). string ...

  7. 在gitlab网页上合并分支

    在gitlab网页上合并分支 使用gitlab网页将代码合并分 下面将dev分支代码合并至master 1.点击request merge 2.源分支为当前分支,目标分支默认为master,确认无误, ...

  8. 批量执行异步任务CompletionService

    批量执行异步任务CompletionService 核心思想,就是将异步结果放入到阻塞队列中,然后再消费队列,实现异步任务批量执行 接口方法说明 Future<V> submit(Call ...

  9. 将DataTable转成Json字符串

    1 public string ToJson(DataTable tbl) 2 { 3 if (tbl.Rows.Count > 0) 4 { 5 DataRowCollection rows ...

  10. CountDownLatch原理详解

    介绍 当你看到这篇文章的时候需要先了解AQS的原理,因为本文不涉及到AQS内部原理的讲解. CountDownLatch是一种同步辅助,让我们多个线程执行任务时,需要等待线程执行完成后,才能执行下面的 ...