JAVA程序设计(学堂在线-清华大学) 课后练习题(更新)

喜欢的收藏点赞一下呗,说不定哪天就更新了呢
好像被限流了#¥%#¥@¥,有需要的话可以分享给同学
# 第一章 JAVA语言基础知识 ## 1.1 Java与面向对象程序设计简介 单选题 (1分)

1 对于利用计算机程序求解实际问题的顺序是:

(1) 利用机器进行求解

(2) 用计算机语言表述问题

(3) 将实际问题进行抽象

答案:B (3) (2) (1)

解析:主要负责代码的规范,包括语法语义的检查和安全检查


2 程序设计的发展历程按照发展顺序排序是:

(1)汇编语言 (2)机器语言 (3)高级语言 (4)面向对象的高级语言

答案:C(2)(1)(3)(4)


3 将客观事物看作具有____和____的对象,通过抽象找出同一类对象的共同状态和行为,构成____。

  1. 面向对象的主要思想是:

答案:A 状态,行为,类


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

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

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

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

答案:B (1) (2)


5 面向对象程序的基本特征是:

(1)抽象和封装 (2)继承性(3)多态性

答案: A(1)(2)(3)


6 Java语言的特点是:

(1) 面向对象(2) 安全性(3) 操作平台无关性(4) 多线程(5) 内存管理

答案:D(1)(2)(3)(4)(5)


7 Java语言相比于C,C++的不同之处在于:

(1) 不支持指针(2)可以手动进行内存管理(3)Java编译器生成的代码与平台相关(4)自动对内存进行管理(5)Java编译器生成的字节码,只要是安装了Java的运行系统其程序就能在不同的处理器上执行

答案:C(1)(4)(5)


8 关于Java程序的执行过程,以下选项中,正确的是

(1) 编写.java程序(2)解释器对.java文件进行解释执行(3)编译器将.java文件编译成.class文件(4)解释器对.class文件进行解释执行

答案:B(1)->(3)->(4)


9 Java的主要优点是()

A

直接操作内存,功能强大

B

一次编译,到处运行

C

纯面向对象的语言

D

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

答案:B C


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

A

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

B

运行时由解释器执行代码

C

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

D

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

答案:A


11 编译JAVA源程序文件时将产生相应的字节码文件,这些字节码文件的扩展名为()

A java

B class

C html

D exe

答案:B


12 下面说法正确的是()

A

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

B

JDK的编译命令为java

C

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

D

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

答案:C


13 Java应用程序执行入口的main()方法返回类型是()

A      int

B      void

C      boolean

D      staic

答案:B


14 某Java程序的类定义如下:

public class MyClass{}

则该java源文件在存盘时其文件名应当为

A

myclass.java

B

MyClass.java

C

MYCLASS.java

D

MyClass.class

答案:B


15
设HelloWord的代码为:

class HelloWord{undefined

public void main(String a[]){undefined

System.out.println("hello world");

}

}

下面说法正确的是:


A

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

B

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

C

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

D

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

答案:B




.

1.2-基本数据类型与表达式

选择题(1分)


1

变量i的值为4,下列操作能够得到变量a的值为3的是:

(1) a = i–

(2) a = --i

(3) a = 15%4

(4) a = 14 / 4

(5) a = (i^=7)

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

B(1)(3)(4)(5)

C(2)(3)(4)(5)

D(2)(3)(4)

答案:C


2

某个main()方法中有以下声明:

final int min=0;

final int max = 10;

int num=5;

下列哪个语句可以用来表示“num的值大于等于min且小于等于max”()

A

!( num < min && num > max)

B

num >=min && num <=max

C

num > min || num <=max

D

num >=min || num<=max

答案:B


3

下面不属于Java中的位操作符的是:

(1) ~

(2) &

(3) ^

(4) <<

(5) >>

(6) &&

(7) ||

(8) |

(9) >>>

A
(1)(6)(7)(9)

B
(6)(7)(9)

C
(2)(3)(6)

D
(6)(7)

答案:D
在这里插入图片描述


4
以下哪段代码可以将A,B的值互换()

A
A=A^ B; B=A^ B;A=A^ B

B
A= A^ B;A=A^ B;B=A^ B

C
B= A^ B; B=A^ B; A=A^ B

D
B=A^ B; A= A^ B; A= A^ B

答案:A


5
对于i=1,下列三目运算符的结果为10的是:

A
(i &4) ==0 ? 10:9

B
(i^3) > 2? 10:9

C
(i>>2) >0 ? 10:9

D
((i | 10)) & 9 >10 ?10:9

答案:A

解析:根据第三题下面的图,带入二进制数字,计算可得


6
(1)int a=3; long b = a

(2)double a=3.1415926; float b = a;

(3)int a=3; String b = a+“1”;

(4)float a=3.5; int b=(int)a

A
(1)扩展转换(2)强制转换(3)隐含转换(4)窄化转换

B
(1)扩展转换(2)窄化转换(3)隐含转换(4)强制转换

C
(1)隐含转换(2)窄化转换(3)扩展转换(4)强制转换

D
(1)窄化转换(2)扩展转换(3)强制转换(4)隐含转换

答案:B


7
在Java程序中,下面哪个是不合法的标志符()

A  2D

B  True

C  _name

D  T1

答案:A


8
以下哪些变量的声明是合法的:
(1) try

(2) _try1231

(3) $Try_*

(4) 4_try

(5) #_try

(6) $try_1_for

A (1)(2)(3)

B (1)(2)(4)

C (2)(6)

D (1)(2)(6)

答案:C

解析:try是关键字,Java语言规定标识符由字母,下划线(_),美元符($)和数字组成,且第一个字符不能是数字。


9
下列()不属于Java的基本数据类型

A  int

B  String

C  double

D  boolean

答案:B

解析: 基本数据类型包括 boolean(布尔型)、float(单精度浮点型)、char(字符型)、byte(字节型)、short(短整型)、int(整型)、long(长整型)和 double (双精度浮点型)共 8 种


10
Sytem.out.println(“1”+2)打印到屏幕的结果是:

A  3

B  12

C  1+2

D  4

答案:B


11
下面()是不合法的变量名称

A  While-true

B  True

C  Name

D  T1

答案:A
解析:因为变量名称中可以有"_“但是不可以有”-"


12
在某个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


13
关于java中变量或者常量的说法正确的是:

(1) 常量一旦被初始化就不能被改变。

(2) 变量是由一个标识符命名的量

(3) 变量的值可以改变

(4) 常量的值可以被改变

(5) 变量可以不存在类型

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

B  (1)(2)(3)

C  (2)(3)(4)

D  (1)(2)(4)(5)

答案:B


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

(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


15
如果想要文字量的的实际内容是 “I’m very interested in java Programming” (包含””),以下文字量声明正确的是:

A
string str = “I’m very interested in java Programming”

B
string str = \“I\’m very interested in java Programming\”

C
string str = “\“I\’m very interested in java Programming\””

D
string str = “I\’m very interested in java Programming”

答案:C




.

1.3-数组

单选题(1分)
1
关于Java中数组的说法正确的是:

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

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

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

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

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

B (1)(2)(4)

C (2)(3)(4)

D (2)(4)

答案:B

数组定义后,长度无法修改


2
对于数组的声明与使用,下列说法正确的是:

对于声明 String str[];

(1) 上述声明错误,声明必须指定数组元素的个数

(2) 上述声明正确,声明时,无须指定数组元素的格式

(3)上述声明完成后,java就给str的数组元素分配了内存

(4) 上述声明完成后,java没给str的数组元素分配内存

(5) 上述声明完成后,数组名可以直接使用,给指定数组元素赋值

(6) 上述声明完成后,数组名不能直接使用,需要初始化后才能使用

A (1)(4)(6)

B (2)(4)(6)

C (1)(3)(6)

D (1)(4)(5)

答案:B


3
对于数组的使用,以下做法正确的是:

(1) int a[]={1,2,3}

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

(3) int a[10]={1,‘‘2’’,3};

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

A (1)(2)(4)

B (1)(4)

C (1)(3)(4)

D (1)

答案:D


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

(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


5
关于下面的程序,哪个结论是正确的()

public class Test{

public static void main(String args[]){

int a[]=new int[5];

a.length = 10;

System.out.println(a.length);

}

}

A 程序可以通过编译并正常运行,输出结果为10

B 程序可以通过编译,并正常运行,输出结果为5

C 程序无法通过编译

D 程序可以通过编译,但无法正常运行

答案:C

这个是否能运行直接自己复制运行一遍就行


6
对于下列代码

String str1="java";

String str2="java";

String str3 = new String("java");

StringBuffer str4 = new StringBuffer("java");

以下表达式的值为true的是()

A str1==str2

B str1==str4

C str2==str3

D str3==str4

答案:A


7
下列声明二维数组的语句不合法的是()

A
char c[][] = new char[2][3];

B
char c[][]=new char[6][];

C
char[][] c= new char[3][3];

D
char [][] c = new char[][4];

答案:D




.

1.4-算法的流程控制

单选题(1分)

1
if语句是Java程序中的哪种控制语句:

A.分支控制语句

B.循环语句

C.跳转语句

D.终止语句

答案:A


2
下面哪种if语句不属于Java语言:

A.只有“if”的语句

B.只有“else”的语句

C.“if”-“else”语句

D.“if”-“else if”-“else”语句

答案:B


3
下面哪个条件运算的结果等价于简单的if-else语句:

if(a > b) 
System.out.println(a); 
else 
System.out.println (b);

A.
System.out.println((a>b):a?b);

B.
System.out.println((a>b):b?a);

C.
System.out.println((a>b)?b:a);

D.
System.out.println((a>b)?a:b);

答案:D


4
下面哪种结构不属于Java的流程控制结构:

A.顺序结构

B.选择结构

C.循环结构

D.倒装结构

答案:D


5
下列不能作为switch表达式参数的数据类型是:

A.int

B.char

C.long

D.short

答案:C


6
给定以下程序段,如下:

int i=0, j=-1;
switch(i)
{
case 0: j=1;
case 2: j=2;
default: j=5;
}
System.out.print("j="+j); 

编译运行,正确的结果是:

A.j=-1

B.j=1

C.j=2

D.j=5

答案:D


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

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

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

C.
default语句可有可无

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

答案:A


8
考查下面的程序代码:

int num1=40;
int num2=5;
int ans=0;
if(num1/5==num2) {ans=10; }
if(num2%5==0) {ans=20; }
if(num2==0) {ans=30; }
else {ans=40;}
System.out.println("answer is:" + ans); 

下面哪个是程序的输出结果:

A.
answer is: 30

B.
answer is: 20

C.
answer is: 10

D.
answer is: 40

答案:D


9
假设 int x=4,y=100,下列语句的循环体共执行了多少次:

while(y/x>3) {
  if(y%x>3) x=x +1;
  else y=y/x;
}

A.1次

B.2次

C.3次

D.4次

答案:B


10
以下程序段的输出结果是:

int i = 0;
for(i=4; i>0; i--) {
  if(i==1)
     break;
     System.out.print(i);
}
System.out.print(i);

A.4321

B.4322

C.321

D.432

答案:A




.

1.5-第一章小结

编程题 (100分)

1.Pow函数

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

输入描述

输出描述

示例1:
输入:
0.2 5
输出:
0.00032

解答:

import java.util.Scanner;//此处是为了可以在java程序中进行输入
public class Main {//在学堂在线中,类名必须命名为Main
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		double x = in.nextDouble();
		int n = in.nextInt();
		  double j = x;
		  if(n>=1)//n是正数的情况
		  for(;n>1;n--)
		  {
		      j*=x;
		  }
		  else if(n==0)//n为零的情况
		     j = 1;
		  else if(n<0)//n为负数的情况
			  for(n = Math.abs(n),j = 1/x;n>1;n--)
			  {
				  j/=x;
			  }
			  System.out.print(j);
		}	
}

我把N为零,正负数这三种情况都进行了讨论,但结果依旧只通过了六个

不太清楚为什么,欢迎评论里大佬指正


2.哈密顿距离

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

输入描述

输出描述

示例1:
输入:3 4
输出: 3

提示 :
3的二进制为011, 4的二进制为100,不同位的个数为3

解答:

import java.util.Scanner;
public class Main{
  public static void main(String[] args)
  {
    Scanner in = new Scanner(System.in);
    int a,b,c,d,ans = 0;
    a = in.nextInt();
    b = in.nextInt();
    c = a^b;//此处运用了
    d = 1;
    for(int i = 1;i<=32;i++)
    {
      if((c & d) == 1)	ans++;
      c >>>= 1;
    }
    System.out.print(ans);
  }
}

这里主要就是运用了java操作符的知识。
上面1.2节中第三题那个图。可以对照着计算一下。


3.组三角形

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

输入描述

输出描述

示例1:
输入:
4
2 2 3 4
输出:
3

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

解答:

import java.util.Scanner;
public class Main{
  public static void main(String[] args){
  	Scanner in = new Scanner(System.in);
    int N = in.nextInt();
    int ans = 0;
    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)
						ans++;
				}
			}
		}
  System.out.print(ans);
  } 
}

过程简单易懂,就不多赘述了



.

第二章 JAVA语言基础知识

2.1 面向对象方法的特性

单选题

1 面向对象的程序设计方法采用了什么样的抽象方法构建程序的类与对象:

A.过程抽象

B.数据抽象

C.过程抽象与数据抽象

D.没有采用任何的抽象方法

答案:B




2 下面关于抽象概念的描述中,不正确的是

A.计算机软件开发使用的抽象有过程抽象和数据抽象两种

B.过程抽象强调功能完成的过程和步骤

C.过程抽象按照功能将整个系统的不同部分抽象成不同的类

D.数据抽象的每个抽象数据类型包含了数据和针对这些数据的操作

答案:C




3.下面关于面向对象概念的描述中,不正确的一项是

A. 在现实生活中,对象是指客观世界的实体

B. 程序中的对象就是现实生活中的对象

C. 在程序中,对象是通过一种抽象数据类型来描述的,这种抽象数据类型称为类

D. 在程序中,对象是一组变量和相关方法的集合

答案:B




4.下列不属于面向对象程序设计的基本特征的是:

A.抽象

B.封装

C.继承

D.静态

答案:D




5.Java的封装性是通过什么实现的:

A.访问控制权限

B.设计内部类

C.静态域与静态方法

D.包

答案:A




6.Java语言间的继承关系是:

A.单继承

B.多继承

C.单继承和多继承

D.不能继承

答案:A




7.以下说法中对Java中 定义的父类与子类的关系描述正确是的:

A.一个子类可以有多个父类,一个父类也可以有多个子类

B.一个子类可以有多个父类,但一个父类只可以有一个子类

C.一个子类可以有一个父类,但一个父类可以有多个子类

D.上述说法都不对

答案:C




.

2.2-1 类声明与对象创建

单选题

1.类与对象的关系是:

A.类是对象的抽象

B.对象是类的抽象

C.对象是类的子类

D.类是对象的具体实例

答案:A

类是对象的抽象,而对象是类的具体实例




2.关于Java中类的声明,下面哪个关键字是必须有的:

A. public

B. class

C. extends

D. implements

答案:B




3.在Java类的声明中,类体包含了哪些内容:

A. 变量成员声明及初始化

B. 方法声明

C. 方法体

D. 以上所有内容

答案:D




4.在创建某类的对象时应该:

A. 先声明对象,然后才能使用对象

B. 先声明对象,为对象分配内存空间,然后才能使用对象

C. 先声明对象,为对象分配内存空间,再初始化对象,然后才能使用对象

D. 以上述说法都对

答案:C




5.假设已经声明了一个类A的两个对象a1、a2,为了初始化a1和a2,下面语句正确的是:

A.  a1, a2 = new A();

B.  a1 = new(); a2 = new();

C.  a1 = new(); a2 = new();

D.  a1 = new A(); a2 = new A();

答案:D




.

2.2-2 数据成员

单选题
1.下面关于变量的说法,哪个是不正确的:

A. 实例变量是类的成员变量

B. 类变量用关键字static声明

C. 类变量可以用<实例名>.<类变量名>访问

D. 实例变量可以用<类名>.<实例变量名>访问

答案:D




2.关于下面的程序,哪个说法是正确的:

public class Person{
 static String a[] = new String[5];
 public static void main(String argv[]) {
  System.out.println(a[0]);
 }
}

A. 编译时将产生错误

B. 编译错误,运行时将产生异常

C. 输出为null

D. 输出0

答案:C




3.下面程序的输出结果是:

class Myclass{

 static int member;

}

public class Test{

 public static void main(String args[]){

  Myclass A = new Myclass();

  Myclass B = new Myclass();

  Myclass.member = 1;

  A.member = 2;

  B.member = 3;

  System.out.println("member = "+ Myclass.member);

 }

}

A. member = 1

B. member = 2

C. member = 3

D. member = 0

答案:C




4.类变量的修饰符是:

A. static

B. class

C. public

D. void

答案:A

啊,我这个题自己给做错了,不该不该




.

2.2-3-方法成员

单选题
1.考虑以下的方法头声明:
public void myMethod(int num, char letter)
下面哪个描述是正确的:

A. 这个方法有个int型的参数,它的形式参数是letter

B. 这个方法有个int型的参数,它的形式参数是num

C. 这个方法有个char型的参数,它的实际参数是myMethod

D. 这个方法是一个构造方法

答案:B




2.假设有个类已经定义了下述的变量:

int num1 = 10;
int num2 = 20;
String word = new String("exam");
double answer = 25.5;
另外定义了下列方法头:
public int stuff(String s, int x, int y) 

以下哪个是正确的方法调用:

A. num1 = stuff(“hello”, num1, num2);

B. answer = stuff(word, answer, num2);

C. num2 = stuff(“hello”,num1,answer);

D. num1 = stuff(num1,num2,answer);

答案:A




3.要获取以下MyClass类中member的值,采用的语句是:
public class Myclass{
public static int member=1;
public static int getmember(){
return member;
}
};

A. MyClass.member()

B. MyClass().member

C. MyClass.member或者MyClass.getmember()

D. MyClass().member或者MyClass().getmember()

答案:C




4.在Java中,以下哪一个关键字使类不能派生出子类:

A. final

B. public

C. private

D. volatile

答案:A




.

2.2-4-包

单选题
1.下列选项中,用于声明包名的关键字是:

A. import

B. package

C. interface

D. protected

答案:B




2.下列选项中,用于引入其他包的关键字是:

A. import

B. package

C. infterface

D. protected

答案:A




3.以下程序片段,下列哪个选项插入到第2行将引起编译错误:

1.   package mypackage;

2.   

3.   class Myclass{

4.      //do something

5.   }

A. public class MainClass{}

B. package mypackage1;

C. class B{}

D. import java.util. *;

答案:B




4.下面哪个代码片段是错误的:

A.

package mypackage;

public class Rectangle {//doing something...}

B

import java.io.*;

package mypackage;

public class Rectangle {//doing something...} 

C.

import java.io.*;

class Circle{//doing something...}

public class Rectangle {//doing something...}

D.

import java.io.*;

import java.awt.*;

public class Rectangle {//doing something...}

答案:B




.

2.2-5-类的访问权限控制

单选题
1.某类的成员方法只能被自己调用,修饰该方法的是:

A. public

B. protected

C. private

D. 无修饰符

答案:C




2.另外的类要获取以下MyClass类中member的值,采用的语句是:
在这里插入图片描述

A. MyClass.member

B. new MyClass().member

C. MyClass.getMember()

D. MyClass().getMember()

答案:C




3.下列代码在编译时会发生错误,下面哪种修改可以更正错误:
在这里插入图片描述

A. 将private int m改成protected int m

B. 将private int m改成public int m

C. 将private int m改成static int m

D. 将private int m改成int m

答案:C




4.下面哪个关键字不是类及成员的访问控制符:

A. public

B. private

C. static

D. protected

答案:C




.

2.3-1-对象初始化

单选题
1.下列哪一项不是构造方法的特点:

A. 构造方法名必须与类名相同

B. 构造方法不具有任何返回类型

C. 任何一个类都含有构造方法

D. 构造方法修饰词只能是public

答案:D




2.关于Java的构造函数,下列说法哪个正确:

A. 所有类都必须定义一个构造函数

B. 构造函数必须有返回值

C. 构造函数可以访问类的非静态成员

D. 构造函数必须初始化类的所有数据成员

答案:C




3.给定如下代码,要在第三个构造方法的空白处填上一行代码使之能够调用第二个构造方法,这行代码应该是:
在这里插入图片描述

A. Circle(n,a);

B. this(Circle(n,a));

C. this(n,a);

D. this(name,a);

答案:C


4.类Line的定义如下,其中的this代表的是:
在这里插入图片描述

A. this指针

B. 类名Line

C. 父类的对象

D. Line类实例的当前对象引用

答案:D




.

2.3-2-内存回收

单选题
1.关于Java的内存回收,下面哪一项是正确的:

A. 程序员必须创建一个线程来释放内存

B. 内存回收程序允许程序员直接释放内存

C. 内存回收程序负责释放无用内存

D. 内存回收程序可以在指定的时间释放内存对象

答案:C




2.以下代码的运行结果是:
在这里插入图片描述

A. 《罗马假日》所对应的实例对象存储单元被回收

B. 《飘》所对应的实例对象存储单元被回收

C. 《Java程序语言设计》所对应的实例对象存储单元被回收

D. 《未知书籍》所对应的实例对象存储单元被回收

答案:A




.

2.4-枚举类

单选题
1.关于枚举定义说法正确的是:

A. 定义枚举的关键字是:class

B. 枚举中只能有常量

C. 枚举是一种特殊的类,因为它的对象的个数是有限的

D. 枚举中不能定义抽象方法

答案:C




2.下面关于枚举类型,说法错误的是:

A. 枚举值是类的对象

B. 枚举中可以定义数据和方法

C. 枚举类的values()方法用于获得枚举类型的枚举值的数组

D. 枚举类型可以有public的构造函数

答案:D




3.下面程序的输出结果是什么:
在这里插入图片描述

A. 春季,夏季,秋季,冬季

B. 春季,夏季,秋季,冬季,

C. 春季,夏季,秋季,冬季,

D. 春季,夏季,秋季,冬季,

答案:C




.

2.6-第2章小结

编译题
1.矩阵螺旋

给定m × n个元素(m行,n列)的矩阵,以螺旋顺序返回矩阵的所有元素。输入为m n以及m*n的矩阵,输出螺旋顺序的所有元素

输入描述

输出描述

示例1:
输入:
3 3
1 2 3
4 5 6
7 8 9
输出: 123698745

解答:

import java.util.Scanner;

public class Main{
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int m = 0;
		int n = 0;
		int flag = 1;
		int num = 0;
		int cnt = 1;
		m = in.nextInt();
		n = in.nextInt();
		int sum = m * n;
		int[][] matrix = new int[m + 1][n + 1];
		for (int i = 1; i <= m; i++) {
			for (int j = 1; j <= n; j++) {
				matrix[i][j] = in.nextInt();
			}
		}
		int x = 1;
		int y = 1;
		while ((++num) <= sum) {
			if (flag == 1) {
				System.out.print(matrix[x][y++]);
				if (y == n) {
					flag = 2;
				}
			} else if (flag == 2) {
				System.out.print(matrix[x++][y]);
				if (x == m) {
					flag = 3;
					n--;
				}
			} else if (flag == 3) {
				System.out.print(matrix[x][y--]);
				if (y == cnt) {
					flag = 4;
					cnt++;
				}
			} else if (flag == 4) {
				System.out.print(matrix[x--][y]);
				if (x == cnt) {
					flag = 1;
					m--;
				}
			}
		}
	}
}



2.组合数

给定N个无重复的正整数,和目标数M,找出N中所有子集,使得每个子集的和是M,对于每个数而言,可以选多次,所有结果子集不能够重复。输入为2行,第一行为N和M,第二行为N个数,输出为总共的子集数。

输入描述

输出描述

示例1:
输入:
4 7
2 3 6 7
输出:
2

提示
7=7
2+2+3=7

解答:

import java.util.Scanner;

class Main {
    public static int res = 0;
    public static int[] arr = new int[10001];

    public static void find(int nowSum, int n, int ct, int target) {
        if (nowSum == target) {
            res++;
            return;
        }
        else if (nowSum > target) {
            return;
        }
        for (int i = ct; i <= n; i++) {
            find(nowSum + arr[i], n, i, target);
        }
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int m;
        int n;
        n = in.nextInt();
        m = in.nextInt();
        for (int i = 1; i <= n; i++) {
            arr[i] = in.nextInt();
        }
        find(0, n, 1, m);
        System.out.println(res);
    }
}



3.组合数2

给定N个的正整数【可能有重复】,和目标数M,找出N中所有子集,使得每个子集的和是M,对于每个数,只能选一次,所有结果子集不能够重复。输入为2行,第一行为N和M,第二行为N个数,输出为总共的子集数。

输入描述

输出描述

示例1:
输入:
7 8
10 1 2 7 6 1 5
输出:
4

提示:
【1,7】

【1,2,5】

【2,6】

解答:

import java.util.Arrays;
import java.util.Scanner;
 
class Main {
	public static int res = 0;
    public static int[] arr;
 
    public static void func(int nowSum, int n, int ctt, int target) {
        int flag;
        int j = 0;
        if (nowSum == target) {
            res++;
            return;
        } else if (nowSum > target) {
            return;
        }
        for (int i = ctt; i < n; i++) {
            flag = 0;
            if ((i + 1) < n && arr[i] == arr[i + 1]) {
                flag = 1;
                j = i;
                while ((j + 1) < n && arr[j] == arr[j + 1]) {
                    j++;
                }
            }
            if (flag == 0) {
                func(nowSum + arr[i], n, i + 1, target);
            }
            else {
                for (int k = 1; k <= (j - i + 1); k++) {
                    func(nowSum + k * arr[i], n, j + 1, target);
                }
                i = j;
            }
        }
    }
 
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int m;
        int n;
        n = in.nextInt();
        m = in.nextInt();
        arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = in.nextInt();
        }
        Arrays.sort(arr);
        func(0, n, 0, m);
        System.out.println(res);
    }
}



.
其他章节我放到另一个新的博客了,网址如下:
网址

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值