北京邮电大学研究生java技术-孟祥武老师-期末复习题整理

北京邮电大学研究生java技术-孟祥武老师-期末复习题整理
北京邮电大学研究生java技术-孟祥武老师-期末复习题整理

1.判断闰年

import java.util.Scanner;

public class DemoTest {

/**

* @param args 此处代码无实际意义,可删除

*/

public static void main(String[]args){

Scanner scan = new Scanner(System.in);//创建输入流扫描器;

System.out.println("请输入一个年份:");//向控制台输出一个提示信息

long year;

try{

year = scan.nextLong();

if(year%4 == 0 && year%100!=0 || year%400 == 0){//是闰年

System.out.print(year+"是闰年!");

}else{

System.out.print(year+"不是闰年!");

}

}catch(Exception e){

System.out.println("你输入的不是有效的年份");

}

}

} 2.Socket编程

对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket。服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了。首先ServerSocket将在服务端监听某个端口,当发现客户端有Socket来试图连接它时,它会accept该Socket的连接请求,同时在服务端建立一个对应的Socket与之进行通信。这样就有两个Socket了,客户端和服务端各一个。

对于Socket之间的通信其实很简单,服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容。Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入流就可以读出对应的内容。下面来看一些服务端与客户端通信的例子:

1、客户端写服务端读

服务端代码

Java代码

public class Server {

public static void main(String args[]) throws IOException { //为了简单起见,所有的异常信息都往外抛

int port = 8899;

//定义一个ServerSocket监听在端口8899上

ServerSocket server = new ServerSocket(port);

//server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的

Socket socket = server.accept();

//跟客户端建立好连接之后,我们就可以获取socket的InputStream,并从中读取客户端发过来的信息了。

Reader reader = new InputStreamReader(socket.getInputStream());

char chars[] = new char[64];

int len;

StringBuilder sb = new StringBuilder();

while ((len=reader.read(chars)) != -1) {

sb.append(new String(chars, 0, len));

}

System.out.println("from client: " + sb);

reader.close();

socket.close();

server.close();

}

}

服务端从Socket的InputStream中读取数据的操作也是阻塞式的,如果从输入流中没有读取到数据程序会一直在那里不动,直到客户端往Socket的输出流中写入了数据,或关闭了Socket的输出流。当然,对于客户端的Socket也是同样如此。在操作完以后,整个程序结束前记得关闭对应的资源,即关闭对应的IO流和Socket。

客户端代码

Java代码

public class Client {

public static void main(String args[]) throws Exception {

//为了简单起见,所有的异常都直接往外抛

String host = "127.0.0.1"; //要连接的服务端IP地址

int port = 8899; //要连接的服务端对应的监听端口

//与服务端建立连接

Socket client = new Socket(host, port);

//建立连接后就可以往服务端写数据了

Writer writer = new OutputStreamWriter(client.getOutputStream() );

writer.write("Hello Server.");

writer.flush();//写完后要记得flush

writer.close();

client.close();

}

}

对于客户端往Socket的输出流里面写数据传递给服务端要注意一点,如果写操作之后程序不是对应着输出流的关闭,而是进行其他阻塞式的操作(比如从输入流里面读数据),记住要flush一下,只有这样服务端才能收到客户端发送的数据,否则可能会引起两边无限的互相等待。在稍后讲到客户端和服务端同时读和写的时候会说到这个问题。

2、客户端和服务端同时读和写

前面已经说了Socket之间是双向通信的,它既可以接收数据,同时也可以发送数据。

服务端代码

Java代码

public class Server {

public static void main(String args[]) throws IOException { //为了简单起见,所有的异常信息都往外抛

int port = 8899;

//定义一个ServerSocket监听在端口8899上

ServerSocket server = new ServerSocket(port);

//server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的

Socket socket = server.accept();

//跟客户端建立好连接之后,我们就可以获取socket的InputStream,并从中读取客户端发过来的信息了。

Reader reader = new InputStreamReader(socket.getInputStream());

char chars[] = new char[64];

int len;

StringBuilder sb = new StringBuilder();

while ((len=reader.read(chars)) != -1) {

sb.append(new String(chars, 0, len));

}

System.out.println("from client: " + sb);

//读完后写一句

Writer writer = new OutputStreamWriter(socket.getOutputStream() );

writer.write("Hello Client.");

writer.flush();

writer.close();

reader.close();

socket.close();

server.close();

}

}

在上述代码中首先我们从输入流中读取客户端发送过来的数据,接下来我们再往输出流里面写入数据给客户端,接下来关闭对应的资源文件。而实际上上述代码可能并不会按照我们预先设想的方式运行,因为从输入流中读取数据是一个阻塞式操作,在上述的while循环中当读到数据的时候就会执行循环体,否则就会阻塞,这样后面的写操作就永远都执行不了了。除非客户端对应的Socket关闭了阻塞才会停止,while循环也会跳出。针对这种可能永远无法执行下去的情况的解决方法是while循环需要在里面有条件的跳出来,纵观上述代码,在不断变化的也只有取到的长度len和读到的数据了,len已经是不能用的了,唯一能用的就是读到的数据了。针对这种情况,通常我们都会约定一个结束标记,当客户端发送过来的数据包含某个结束标记时就说明当前的数据已经发送完毕了,这个时候我们就可以进行循环的跳出了。那么改进后的代码会是这个样子:

Java代码

public class Server {

public static void main(String args[]) throws IOException { //为了简单起见,所有的异常信息都往外抛

int port = 8899;

//定义一个ServerSocket监听在端口8899上

ServerSocket server = new ServerSocket(port);

//server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的

Socket socket = server.accept();

//跟客户端建立好连接之后,我们就可以获取socket的InputStream,并从中读取客户端发过来的信息了。

Reader reader = new InputStreamReader(socket.getInputStream());

char chars[] = new char[64];

int len;

StringBuilder sb = new StringBuilder();

String temp;

int index;

while ((len=reader.read(chars)) != -1) {

temp = new String(chars, 0, len);

if ((index = temp.indexOf("eof")) != -1) {//遇到eof时

就结束接收

sb.append(temp.substring(0, index));

break;

}

sb.append(temp);

}

System.out.println("from client: " + sb);

//读完后写一句

Writer writer = new OutputStreamWriter(socket.getOutputStream() );

writer.write("Hello Client.");

writer.flush();

writer.close();

reader.close();

socket.close();

server.close();

}

}

在上述代码中,当服务端读取到客户端发送的结束标记,即“eof”时就会结束数据的接收,终止循环,这样后续的代码又可以继续进行了。

客户端代码

Java代码

public class Client {

public static void main(String args[]) throws Exception {

//为了简单起见,所有的异常都直接往外抛

String host = "127.0.0.1"; //要连接的服务端IP地址

int port = 8899; //要连接的服务端对应的监听端口

//与服务端建立连接

Socket client = new Socket(host, port);

//建立连接后就可以往服务端写数据了

Writer writer = new OutputStreamWriter(client.getOutputStream());

writer.write("Hello Server.");

writer.flush();

//写完以后进行读操作

Reader reader = new InputStreamReader(client.getInputStream());

char chars[] = new char[64];

int len;

StringBuffer sb = new StringBuffer();

while ((len=reader.read(chars)) != -1) {

sb.append(new String(chars, 0, len));

}

System.out.println("from server: " + sb);

writer.close();

reader.close();

client.close();

}

}

在上述代码中我们先是给服务端发送了一段数据,之后读取服务端返回来的数据,跟之前的服务端一样在读的过程中有可能导致程序一直挂在那里,永远跳不出while循环。这段代码配合服务端的第一段代码就正好让我们分析服务端永远在那里接收数据,永远跳不出while

循环,也就没有之后的服务端返回数据给客户端,客户端也就不可能接收到服务端返回的数据。解决方法如服务端第二段代码所示,在客户端发送数据完毕后,往输出流里面写入结束标记告诉服务端数据已经发送完毕了,同样服务端返回数据完毕后也发一个标记告诉客户端。那么修改后的客户端代码就应该是这个样子:

Java代码

public class Client {

public static void main(String args[]) throws Exception {

//为了简单起见,所有的异常都直接往外抛

String host = "127.0.0.1"; //要连接的服务端IP地址

int port = 8899; //要连接的服务端对应的监听端口

//与服务端建立连接

Socket client = new Socket(host, port);

//建立连接后就可以往服务端写数据了

Writer writer = new OutputStreamWriter(client.getOutputStream());

writer.write("Hello Server.");

writer.write("eof");

writer.flush();

//写完以后进行读操作

Reader reader = new InputStreamReader(client.getInputStream());

char chars[] = new char[64];

int len;

StringBuffer sb = new StringBuffer();

String temp;

int index;

while ((len=reader.read(chars)) != -1) {

temp = new String(chars, 0, len);

if ((index = temp.indexOf("eof")) != -1) {

sb.append(temp.substring(0, index));

break;

}

sb.append(new String(chars, 0, len));

}

System.out.println("from server: " + sb);

writer.close();

reader.close();

client.close();

}

}

我们日常使用的比较多的都是这种客户端发送数据给服务端,服务端接收数据后再返回相应的结果给客户端这种形式。只是客户端和服务端之间不再是这种一对一的关系,而是下面要讲到的多个客户端对应同一个服务端的情况。

3、多个客户端连接同一个服务端

像前面讲的两个例子都是服务端接收一个客户端的请求之后就结束了,不能再接收其他客户端的请求了,这往往是不能满足我们的要求的。通常我们会这样做:

Java代码

public class Server {

public static void main(String args[]) throws IOException { //为了简单起见,所有的异常信息都往外抛

int port = 8899;

//定义一个ServerSocket监听在端口8899上

ServerSocket server = new ServerSocket(port);

while (true) {

//server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的

Socket socket = server.accept();

//跟客户端建立好连接之后,我们就可以获取socket的InputStream,并从中读取客户端发过来的信息了。

Reader reader = new InputStreamReader(socket.getInputStream() );

char chars[] = new char[64];

int len;

StringBuilder sb = new StringBuilder();

String temp;

int index;

while ((len=reader.read(chars)) != -1) {

temp = new String(chars, 0, len);

if ((index = temp.indexOf("eof")) != -1) {//遇到eof时就结束接收

sb.append(temp.substring(0, index));

break;

}

sb.append(temp);

}

System.out.println("from client: " + sb);

//读完后写一句

Writer writer = new OutputStreamWriter(socket.getOutputStream ());

writer.write("Hello Client.");

writer.flush();

writer.close();

reader.close();

socket.close();

}

}

}

在上面代码中我们用了一个死循环,在循环体里面ServerSocket调用其accept方法试图接收来自客户端的连接请求。当没有接收到请求的时候,程序会在这里阻塞直到接收到来自客户端的连接请求,之后会跟当前建立好连接的客户端进行通信,完了后会接着执行循环体再次尝试接收新的连接请求。这样我们的ServerSocket就能接收来自所有客户端的连接请求了,并且与它们进行通信了。这就实现了一个简单的一个服务端与多个客户端进行通信的模式。

上述例子中虽然实现了一个服务端跟多个客户端进行通信,但是还存在一个问题。在上述例子中,我们的服务端处理客户端的连接请求是同步进行的,每次接收到来自客户端的连接请求后,都要先跟当前的客户端通信完之后才能再处理下一个连接请求。这在并发比较多的情况下会严重影响程序的性能,为此,我们可以把它改为如下这种异步处理与客户端通信的方式:

Java代码

public class Server {

public static void main(String args[]) throws IOException { //为了简单起见,所有的异常信息都往外抛

int port = 8899;

//定义一个ServerSocket监听在端口8899上

ServerSocket server = new ServerSocket(port);

while (true) {

//server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的

Socket socket = server.accept();

//每接收到一个Socket就建立一个新的线程来处理它

new Thread(new Task(socket)).start();

}

}

/**

* 用来处理Socket请求的

*/

static class Task implements Runnable {

private Socket socket;

public Task(Socket socket) {

this.socket = socket;

}

public void run() {

try {

handleSocket();

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 跟客户端Socket进行通信

* @throws Exception

*/

private void handleSocket() throws Exception {

Reader reader = new InputStreamReader(socket.getInputStre am());

char chars[] = new char[64];

int len;

StringBuilder sb = new StringBuilder();

String temp;

int index;

while ((len=reader.read(chars)) != -1) {

temp = new String(chars, 0, len);

if ((index = temp.indexOf("eof")) != -1) {//遇到eof时就结束接收

sb.append(temp.substring(0, index));

break;

}

sb.append(temp);

}

System.out.println("from client: " + sb);

//读完后写一句

Writer writer = new OutputStreamWriter(socket.getOutputStream ());

writer.write("Hello Client.");

writer.flush();

writer.close();

reader.close();

socket.close();

}

}

}

在上面代码中,每次ServerSocket接收到一个新的Socket连接请求后都会新起一个线程来跟当前Socket进行通信,这样就达到了异步处理与客户端Socket进行通信的情况。

在从Socket的InputStream中接收数据时,像上面那样一点点的读就太复杂了,有时候我们就会换成使用BufferedReader来一次读一行,如:

Java代码

public class Server {

public static void main(String args[]) throws IOException { //为了简单起见,所有的异常信息都往外抛

int port = 8899;

//定义一个ServerSocket监听在端口8899上

ServerSocket server = new ServerSocket(port);

while (true) {

//server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的

Socket socket = server.accept();

//每接收到一个Socket就建立一个新的线程来处理它

new Thread(new Task(socket)).start();

}

}

/**

* 用来处理Socket请求的

*/

static class Task implements Runnable {

private Socket socket;

public Task(Socket socket) {

this.socket = socket;

}

public void run() {

try {

handleSocket();

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 跟客户端Socket进行通信

* @throws Exception

*/

private void handleSocket() throws Exception {

BufferedReader br = new BufferedReader(new InputStreamRe ader(socket.getInputStream()));

StringBuilder sb = new StringBuilder();

String temp;

int index;

while ((temp=br.readLine()) != null) {

System.out.println(temp);

if ((index = temp.indexOf("eof")) != -1) {//遇到eof时就结束接收

sb.append(temp.substring(0, index));

break;

}

sb.append(temp);

}

System.out.println("from client: " + sb);

//读完后写一句

Writer writer = new OutputStreamWriter(socket.getOutputStream ());

writer.write("Hello Client.");

writer.write("eof\n");

writer.flush();

writer.close();

br.close();

socket.close();

}

}

}

这个时候需要注意的是,BufferedReader的readLine方法是一次读一行的,这个方法是阻塞的,直到它读到了一行数据为止程序才会继续往下执行,那么readLine什么时候才会读到一行呢?直到程序遇到了换行符或者是对应流的结束符readLine方法才会认为读到了一行,才会结束其阻塞,让程序继续往下执行。所以我们在使用BufferedReader的readLine 读取数据的时候一定要记得在对应的输出流里面一定要写入换行符(流结束之后会自动标记为结束,readLine可以识别),写入换行符之后一定记得如果输出流不是马上关闭的情况下记得flush一下,这样数据才会真正的从缓冲区里面写入。对应上面的代码我们的客户端程序应该这样写:

Java代码

public class Client {

public static void main(String args[]) throws Exception {

//为了简单起见,所有的异常都直接往外抛

String host = "127.0.0.1"; //要连接的服务端IP地址

int port = 8899; //要连接的服务端对应的监听端口

//与服务端建立连接

Socket client = new Socket(host, port);

//建立连接后就可以往服务端写数据了

Writer writer = new OutputStreamWriter(client.getOutputStream());

writer.write("Hello Server.");

writer.write("eof\n");

writer.flush();

//写完以后进行读操作

BufferedReader br = new BufferedReader(new InputStreamReader(cli ent.getInputStream()));

StringBuffer sb = new StringBuffer();

String temp;

int index;

while ((temp=br.readLine()) != null) {

if ((index = temp.indexOf("eof")) != -1) {

sb.append(temp.substring(0, index));

break;

}

sb.append(temp);

}

System.out.println("from server: " + sb);

writer.close();

br.close();

client.close();

}

}

4、设置超时时间

假设有这样一种需求,我们的客户端需要通过Socket从服务端获取到XX信息,然后给用户展示在页面上。我们知道Socket在读数据的时候是阻塞式的,如果没有读到数据程序会一直阻塞在那里。在同步请求的时候我们肯定是不能允许这样的情况发生的,这就需要我们在请求达到一定的时间后控制阻塞的中断,让程序得以继续运行。Socket为我们提供了一个setSoTimeout()方法来设置接收数据的超时时间,单位是毫秒。当设置的超时时间大于0,并且超过了这一时间Socket还没有接收到返回的数据的话,Socket就会抛出一个SocketTimeoutException。

假设我们需要控制我们的客户端在开始读取数据10秒后还没有读到数据就中断阻塞的话我们可以这样做:

Java代码

public class Client {

public static void main(String args[]) throws Exception {

//为了简单起见,所有的异常都直接往外抛

String host = "127.0.0.1"; //要连接的服务端IP地址

int port = 8899; //要连接的服务端对应的监听端口

//与服务端建立连接

Socket client = new Socket(host, port);

//建立连接后就可以往服务端写数据了

Writer writer = new OutputStreamWriter(client.getOutputStream());

writer.write("Hello Server.");

writer.write("eof\n");

writer.flush();

//写完以后进行读操作

BufferedReader br = new BufferedReader(new InputStreamReader(cli ent.getInputStream()));

//设置超时间为10秒

client.setSoTimeout(10*1000);

StringBuffer sb = new StringBuffer();

String temp;

int index;

try {

while ((temp=br.readLine()) != null) {

if ((index = temp.indexOf("eof")) != -1) {

sb.append(temp.substring(0, index));

break;

}

sb.append(temp);

}

} catch (SocketTimeoutException e) {

System.out.println("数据读取超时。");

}

System.out.println("from server: " + sb);

writer.close();

br.close();

client.close();

}

}

5、接收数据乱码

对于这种服务端或客户端接收中文乱码的情况通常是因为数据发送时使用的编码跟接收时候使用的编码不一致。比如有下面这样一段服务端代码:

Java代码

public class Server {

public static void main(String args[]) throws IOException { //为了简单起见,所有的异常信息都往外抛

int port = 8899;

//定义一个ServerSocket监听在端口8899上

ServerSocket server = new ServerSocket(port);

while (true) {

//server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的

Socket socket = server.accept();

//每接收到一个Socket就建立一个新的线程来处理它

new Thread(new Task(socket)).start();

}

}

/**

* 用来处理Socket请求的

*/

static class Task implements Runnable {

private Socket socket;

public Task(Socket socket) {

this.socket = socket;

}

public void run() {

try {

handleSocket();

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 跟客户端Socket进行通信

* @throws Exception

*/

private void handleSocket() throws Exception {

BufferedReader br = new BufferedReader(new InputStreamRe ader(socket.getInputStream(), "GBK"));

StringBuilder sb = new StringBuilder();

String temp;

int index;

while ((temp=br.readLine()) != null) {

System.out.println(temp);

if ((index = temp.indexOf("eof")) != -1) {//遇到eof时就结束接收

sb.append(temp.substring(0, index));

break;

}

sb.append(temp);

}

System.out.println("客户端: " + sb);

//读完后写一句

Writer writer = new OutputStreamWriter(socket.getOutputStream (), "UTF-8");

writer.write("你好,客户端。");

writer.write("eof\n");

writer.flush();

writer.close();

br.close();

socket.close();

}

}

}

这里用来测试我就弄的混乱了一点。在上面服务端代码中我们在定义输入流的时候明确定义了使用GBK编码来读取数据,而在定义输出流的时候明确指定了将使用UTF-8编码来发送数据。如果客户端上送数据的时候不以GBK编码来发送的话服务端接收的数据就很有可能会乱码;同样如果客户端接收数据的时候不以服务端发送数据的编码,即UTF-8编码来接收数据的话也极有可能会出现数据乱码的情况。所以,对于上述服务端代码,为使我们的程序能够读取对方发送过来的数据,而不出现乱码情况,我们的客户端应该是这样的:

Java代码

public class Client {

public static void main(String args[]) throws Exception {

//为了简单起见,所有的异常都直接往外抛

String host = "127.0.0.1"; //要连接的服务端IP地址

int port = 8899; //要连接的服务端对应的监听端口

//与服务端建立连接

Socket client = new Socket(host, port);

//建立连接后就可以往服务端写数据了

Writer writer = new OutputStreamWriter(client.getOutputStream(), "GBK");

writer.write("你好,服务端。");

writer.write("eof\n");

writer.flush();

//写完以后进行读操作

BufferedReader br = new BufferedReader(new InputStreamReader(cli ent.getInputStream(), "UTF-8"));

//设置超时间为10秒

client.setSoTimeout(10*1000);

StringBuffer sb = new StringBuffer();

String temp;

int index;

try {

while ((temp=br.readLine()) != null) {

if ((index = temp.indexOf("eof")) != -1) {

sb.append(temp.substring(0, index));

break;

}

sb.append(temp);

}

} catch (SocketTimeoutException e) {

System.out.println("数据读取超时。");

}

System.out.println("服务端: " + sb);

writer.close();

br.close();

client.close();

}

}

3.排序

日常操作中常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还有基数排序、鸡尾酒排序、桶排序、鸽巢排序、归并排序等。

冒泡排序

是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

代码

/**

* 冒泡法排序

*

  • 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  • *

  • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  • *

  • 针对所有的元素重复以上的步骤,除了最后一个。
  • *

  • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
  • *

    * @param numbers

    * 需要排序的整型数组

    */

    public static void bubbleSort(int[] numbers) {

    int temp; // 记录临时中间值

    int size = numbers.length; // 数组大小

    for (int i = 0; i < size - 1; i++) {

    for (int j = i + 1; j < size; j++) {

    if (numbers[i] < numbers[j]) { // 交换两数的位置

    temp = numbers[i];

    numbers[i] = numbers[j];

    numbers[j] = temp;

    }

    }

    }

    }

    快速排序

    使用分治法策略来把一个序列分为两个子序列。

    代码

    /**

    * 快速排序

    *

      *

    • 从数列中挑出一个元素,称为“基准”
    • *

    • 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分割之后,

      * 该基准是它的最后位置。这个称为分割(partition)操作。

    • *

    • 递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。
    • *

    *

    * @param numbers

    * @param start

    * @param end

    */

    public static void quickSort(int[] numbers, int start, int end) {

    if (start < end) {

    int base = numbers[start]; // 选定的基准值(第一个数值作为基准值)

    int temp; // 记录临时中间值

    int i = start, j = end;

    do {

    while ((numbers[i] < base) && (i < end))

    i++;

    while ((numbers[j] > base) && (j > start))

    j--;

    if (i <= j) {

    temp = numbers[i];

    numbers[i] = numbers[j];

    numbers[j] = temp;

    i++;

    j--;

    }

    } while (i <= j);

    if (start < j)

    quickSort(numbers, start, j);

    if (end > i)

    quickSort(numbers, i, end);

    }

    }

    选择排序

    是一种简单直观的排序方法,每次寻找序列中的最小值,然后放在最末尾的位置。

    代码

    /**

    * 选择排序

    *

  • 在未排序序列中找到最小元素,存放到排序序列的起始位置
  • *

  • 再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。
  • *

  • 以此类推,直到所有元素均排序完毕。
  • *

    * @param numbers

    */

    public static void selectSort(int[] numbers) {

    int size = numbers.length, temp;

    for (int i = 0; i < size; i++) {

    int k = i;

    for (int j = size - 1; j >i; j--) {

    if (numbers[j] < numbers[k]) k = j;

    }

    temp = numbers[i];

    numbers[i] = numbers[k];

    numbers[k] = temp;

    }

    }

    插入排序

    的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。其具体步骤参见代码及注释。

    代码

    /**

    * 插入排序

    *

      *

    • 从第一个元素开始,该元素可以认为已经被排序
    • *

    • 取出下一个元素,在已经排序的元素序列中从后向前扫描
    • *

    • 如果该元素(已排序)大于新元素,将该元素移到下一位置
    • *

    • 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
    • *

    • 将新元素插入到该位置中
    • *

    • 重复步骤2
    • *

    *

    * @param numbers

    */

    public static void insertSort(int[] numbers) {

    int size = numbers.length, temp, j;

    for(int i=1; i

    temp = numbers[i];

    for(j = i; j > 0 && temp < numbers[j-1]; j--)

    numbers[j] = numbers[j-1];

    numbers[j] = temp;

    }

    }

    归并排序

    是建立在归并操作上的一种有效的排序算法,归并是指将两个已经排序的序列合并成一个序列的操作。参考代码如下:

    代码

    /**

    * 归并排序

    *

      *

    • 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
    • *
    • 设定两个指针,最初位置分别为两个已经排序序列的起始位置
    • *

    • 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
    • *

    • 重复步骤3直到某一指针达到序列尾
    • *

    • 将另一序列剩下的所有元素直接复制到合并序列尾
    • *

    *

    * @param numbers

    */

    public static void mergeSort(int[] numbers, int left, int right) {

    int t = 1;// 每组元素个数

    int size = right - left + 1;

    while (t < size) {

    int s = t;// 本次循环每组元素个数

    t = 2 * s;

    int i = left;

    while (i + (t - 1) < size) {

    merge(numbers, i, i + (s - 1), i + (t - 1));

    i += t;

    }

    if (i + (s - 1) < right)

    merge(numbers, i, i + (s - 1), right);

    }

    }

    /**

    * 归并算法实现

    *

    * @param data

    * @param p

    * @param q

    * @param r

    */

    private static void merge(int[] data, int p, int q, int r) {

    int[] B = new int[data.length];

    int s = p;

    int t = q + 1;

    int k = p;

    while (s <= q && t <= r) {

    if (data[s] <= data[t]) {

    B[k] = data[s];

    s++;

    } else {

    B[k] = data[t];

    t++;

    }

    k++;

    }

    if (s == q + 1)

    B[k++] = data[t++];

    else

    B[k++] = data[s++];

    for (int i = p; i <= r; i++)

    data[i] = B[i];

    }

    将之前介绍的所有排序算法整理成NumberSort类,代码

    代码

    package test.sort;

    import java.util.Random;

    //Java实现的排序类

    public class NumberSort {

    //私有构造方法,禁止实例化

    private NumberSort() {

    super();

    }

    //冒泡法排序

    public static void bubbleSort(int[] numbers) {

    int temp; // 记录临时中间值

    int size = numbers.length; // 数组大小

    for (int i = 0; i < size - 1; i++) {

    for (int j = i + 1; j < size; j++) {

    if (numbers[i] < numbers[j]) { // 交换两数的位置

    temp = numbers[i];

    numbers[i] = numbers[j];

    numbers[j] = temp;

    }

    }

    }

    }

    //快速排序

    public static void quickSort(int[] numbers, int start, int end) {

    if (start < end) {

    int base = numbers[start]; // 选定的基准值(第一个数值作为基准值)

    int temp; // 记录临时中间值

    int i = start, j = end;

    do {

    while ((numbers[i] < base) && (i < end))

    i++;

    while ((numbers[j] > base) && (j > start))

    j--;

    if (i <= j) {

    temp = numbers[i];

    numbers[i] = numbers[j];

    numbers[j] = temp;

    i++;

    j--;

    }

    } while (i <= j);

    if (start < j)

    quickSort(numbers, start, j);

    if (end > i)

    quickSort(numbers, i, end);

    }

    }

    //选择排序

    public static void selectSort(int[] numbers) {

    int size = numbers.length, temp;

    for (int i = 0; i < size; i++) {

    int k = i;

    for (int j = size - 1; j > i; j--) {

    if (numbers[j] < numbers[k])

    k = j;

    }

    temp = numbers[i];

    numbers[i] = numbers[k];

    numbers[k] = temp;

    }

    }

    //插入排序

    // @param numbers

    public static void insertSort(int[] numbers) {

    int size = numbers.length, temp, j;

    for (int i = 1; i < size; i++) {

    temp = numbers[i];

    for (j = i; j > 0 && temp < numbers[j - 1]; j--)

    numbers[j] = numbers[j - 1];

    numbers[j] = temp;

    }

    }

    //归并排序

    public static void mergeSort(int[] numbers, int left, int right) { int t = 1;// 每组元素个数

    int size = right - left + 1;

    while (t < size) {

    int s = t;// 本次循环每组元素个数

    t = 2 * s;

    int i = left;

    while (i + (t - 1) < size) {

    merge(numbers, i, i + (s - 1), i + (t - 1));

    i += t;

    }

    if (i + (s - 1) < right)

    merge(numbers, i, i + (s - 1), right);

    }

    }

    //归并算法实现

    private static void merge(int[] data, int p, int q, int r) { int[] B = new int[data.length];

    int s = p;

    int t = q + 1;

    int k = p;

    while (s <= q && t <= r) {

    if (data[s] <= data[t]) {

    B[k] = data[s];

    s++;

    } else {

    B[k] = data[t];

    t++;

    }

    k++;

    }

    if (s == q + 1)

    B[k++] = data[t++];

    else

    B[k++] = data[s++];

    for (int i = p; i <= r; i++)

    data[i] = B[i];

    }

    }

    JAVA期末考试试卷

    天津城市建设学院2007~2008学年第二学期 《 java 语言程序设计A 》 试题A 卷 课程号:073101-0 试卷说明:闭卷考试,时间120分钟。 一、 填空(本题共15空,每空2分,共30分) 1.如果一个java 源程序文件中定义有4个类,使用sun 公司的JDK 编译器javac 编译该源程序文件将产生_____4___个文件名与类名相同扩展名为___.Class_____的字节码文件。 2.Java 中所有类都是类 __Object__的子类。 3.请填出在java .lang 包中与下列基本数据类型相对应的封装类: float :java .lang .Float , char : _ java .Lang.char_______, boolean : ___ java .Lang.boolean_____。 4.被关键字____final______修饰的方法是不能被当前类的子类重新定义的方法 5.线程的四种状态是__新建_____ 、_运行_ 、_中断 、__死亡___。 6.java 语言中__https://www.360docs.net/doc/0b19392932.html,ng.Objet ___是所有类的根。 7.Swing 的事件处理机制包括__事件的监听者__、事件和事件处理者。 8.URL_____Uniform Resourse Locator_____是的缩写。 9.java 有两类应用程序java Application 和____java 10.转义字符以___\__开头。 二、选择(本题共20小题,每题2分,共40分) 1.欲构造ArrayList 类的一个实例,此类继承了List 接口,下列哪个方法是正确的 ? ( B ) A 、 ArrayList myList=new Object (); B 、 List myList=new ArrayList (); C 、 ArrayList myList=new List (); D 、 List myList=new List (); 2.paint()方法使用哪种类型的参数? ( A ) A 、 Graphics B 、 Graphics2D C 、 String D 、 Color 3.指出正确的表达式 ( C ) A 、 byte=128; B 、 Boolean=null; C 、 long l=0xfffL; D 、 double=0.9239d; 4.指出下列程序运行的结果 ( B ) public class Example{ String str=new String("good"); char[]ch={'a','b','c'}; public static void main(String args[]){ Example ex=new Example(); ex .change(ex .str,ex .ch); System .out .print(ex .str+" and "); Sytem .out .print(ex .ch); } public void change(String str,char ch[]){ str="test ok"; ch[0]='g'; } } B 、 good and abc B 、 good and gbc C 、test ok and abc D 、 test ok and gbc 5.运行下列程序, 会产生什么结果 ( A )

    2012-2013-北邮概率论研究生试题答案定稿

    2012-2013-北邮概率论研究生试题答案定稿

    2 北京邮电大学2012——2013学年第1学期 《概率论与随机过程试题》期末考试试题答案 考试注意事项:学生必须将答题内容(包括填空题)做在试题答题纸上,做在试卷纸上一律无效。在答题纸上写上你的班号和选课单上的学号,班内序号! 一. 单项选择题和填空题:(每空3分,共30分) 1.设A 是定义在非空集合Ω上的集代数,则下面正确的是 .A (A )若A B ∈∈A,A ,则A B -∈A ; (B )若A A B ∈?A,,则B ∈A ; (C )若12n A n =∈?A,,,,则1n n A ∞ =∈U A ; (D )若12n A n =∈?A,,,,且123A A A ???L ,则1 n n A ∞ =∈I A . 2. 设(),ΩF 为一可测空间,P 为定义在其上的有限可加测度,则下面正确的是 .c (A )若A B ∈∈F,F ,则()()()P A B P A P B -=-; (B )若12n A n =∈?F,,,,,且123A A A ???L ,则1 li ()()m n n n n P A A P ∞ →∞ ==I ; (C )若A B C ∈∈∈F,F,F,,则()()()()P A B C P A P AB P A BC =++U U ; (D )若12n A n =∈?F,,,,,且,i j A i j A =??=/,1 1 ()()n n n n P P A A ∞ ∞ ===∑U . 3.设f 为从概率空间(),P ΩF,到Borel 可测空间(),R B 上的实可测函数,表达式为100 0()k A k f kI ω==∑,其中100 ,,i j n n i j A A A ==??=Ω/=U ,则fdP Ω=? ;

    java考试试卷及答案

    JAVA考试试卷及答案 选择题 3、在Java Applet程序用户自定义的Applet子类中,一般需要重载父类的( D )方法来完成一些画 图操作。 A. start() B. stop() C. init() D. paint() 3、Java语言具有许多优点和特点,下列选项中,哪个反映了Java程序并行机制的特点?B A)安全性B)多线程C)跨平台D)可移植 4、下列哪个类声明是正确的?D A)abstract final class HI{···}B)abstract private move(){···} C)protected private number; D)public abstract class Car{···} 6、在Java语言中,下列哪些语句关于内存回收的说明是正确的? B A.程序员必须创建一个线程来释放内存; B.内存回收程序负责释放无用内存 C.内存回收程序允许程序员直接释放内存 D.内存回收程序可以在指定的时间释放内存对象 10、下列Object类中的方法,哪一项不是完全跟线程有关:A A.String toString() B.void notify() C.void notifyAll() D.void wait() 11、给出下面代码:C public class Person{ static int arr[] = new int[10]; public static void main(String a[]) { System.out.println(arr[1]); } } 下列说法中正确的是? A.编译时将产生错误; B.编译时正确,运行时将产生错误; C.输出零; D.输出空。 12、字符串是Java已定义的类型,关于它的构造函数,下面说法不正确的是:B A.String(char[] value, int offset, int count) B.String(int[] codePoints,int offset, int count) C.String(String original) D.String(StringBuffer buffer) 13、下列说法中正确的是:C A.导入包会影响程序的性能

    北京邮电大学研究生学业奖学金实施细则

    北京邮电大学研究生学业奖学金实施细则 第一章总则 第一条为激励研究生勤奋学习、潜心科研,在全面实行研究生教育收费制度的情况下更好地支持研究生顺利完成学业,从2014年秋季学期起,设立研究生学业奖学金。根据《北京邮电大学研究生培养资助体系实施方案》(2014年3月31日校务会审议通过),特制定本细则。 第二条研究生学业奖学金的奖励对象为北京邮电大学全日制研究生(不含MBA、MPA、MEM专业学位硕士研究生及有工作单位的定向生)。获得奖励的研究生须具有中华人民共和国国籍。 第二章奖励比例、标准与基本条件 第三条在投入全部国家拨款的基础上,将部分学费收入用于设立研究生学业奖学金,根据《北京邮电大学研究生培养资助体系实施方案》,具体情况见下表: 硕士研究生: 注:2.5年学制的学生,第三学年学业奖学金按半年的金额发放。

    博士研究生: 第四条研究生学业奖学金基本申请条件: 1.热爱社会主义祖国,拥护中国共产党的领导; 2.遵守宪法和法律,遵守高等学校规章制度; 3.诚实守信,品学兼优; 4.积极参与科学研究,热心班级和社会公益活动。 凡有下列情况之一者,不能参加当年研究生学业奖学金的评定: 1. 参评当年无故不按规定完成学期注册的研究生; 2.在学术研究中,有违反《北京邮电大学学术与道德规范管理办法》; 3. 因违反校规校纪受记过以上(含记过)处分的研究生; 4. 学业奖学金评定时,学籍状态为保留入学资格或休学的学生(新生除 外) 第五条学业奖学金实施动态管理模式,每学年与研究生国家奖学金同时评定,每年评定一次。国家奖学金与学业奖学金可兼得,但学术成果不得重复使用。 第六条入学第一年学业奖学金应综合入学考试总评成绩、潜在科研素质等

    JAVA期末试题及答案

    Java 程序设计》课程试卷 1.使用 Java 语言编写的源程序保存时的文件扩展名是( )。 (A ) .class ( B ) .java C ) .cpp ( D ) .txt 2.设 int a=-2 ,则表达式 a>>>3 的值为( )。 (A ) 0 (B )3 (C ) 8 (D )-1 3.设有数组的定义 int[] a = new int[3] ,则下面对数组元素的引用错误的是( ) ( A )a[0]; ( B ) a[a.length-1]; (C )a[3]; (D )int i=1 ; a[i]; 4.在类的定义中可以有两个同名函数,这种现象称为函数( )。 (A )封装 (B )继承 (C )覆盖 (D )重载 5.在类的定义中构造函数的作用是( )。 (A )保护成员变量 (B )读取类的成员变量 (C )描述类的特征 (D )初始化成员变量 6.下面关键字中,哪一个不是用于异常处理语句( )。 ( A ) try ( B ) break ( C ) catch ( D ) finally 7.类与对象的关系是( )。 (A )类是对象的抽象 (B )对象是类的抽象 15. Java 语言使用的字符码集是 (A) ASCII (B) BCD (C) DCB 16. 如果一个类的成员变量 (A) public (B) (C 对象是类的子类 (D )类是对象的具体实例 )。 8.下面哪一个是 Java 中不合法的标识符( ( A )$persons ( B ) twoNum ( C )_myVar ( D )*point 9.为 AB 类的一个无形式参数无返回值的方法 ( ) 。 ( A ) static void method( ) ( B ) public void method( ) ( C ) final void method( ) ( D ) abstract void method( ) 10.欲构造 ArrayList 类的一个实例,此类继承了 ( A ) ArrayList myList=new Object( ) ( B ) List myList=new ArrayList( ) ( C ) ArrayList myList=new List( ) ( D ) List myList=new List( ) 11. Java 源文件和编译后的文件扩展名分别为( (A) .class 和 .java (C).class 和 .class 12. 在 Java Applet 程序用户自定义的 (A) start( ) (B) stop( ) (C) init( ) 13. 对于一个 Java 源文件, (A) package,import,class (C) import,package,class 14. 下面哪个是非法的: (A) int I = 32; (C) double d = 45.0; method 书写方法头,使得使用类名 List 接口,下列哪个方法是正确的( ) ( B).java 和 .class (D) .java 和 .java Applet 子类中,一般需要重载父类的 (D) paint( ) import, class (B) class,import,package (D) package,class,import ( ) 定义以及 package 正确的顺序是: (B) float f = 45.0; (D) char c = // 符号错 AB 作为前缀就可以调用它,该方法头的形式为 方法来完成一些画图操作。 (D) Unicode 只能 在所在类中使用 则该成员变量必须使用的修饰是

    2013-2014-北邮概率论研究生概率论-答案

    北京邮电大学2013——2014学年第1学期 《概率论与随机过程试题》期末考试试题答案 考试注意事项:学生必须将答题内容(包括填空题)做在试题答题纸上,做在试卷纸上一律无效。在答题纸上写上你的班号和选课单上的学号,班内序号! 一、 填空题:(每空3分,共30分) 1.给定集合A ?Ω,则定义在Ω上的包含A 的最小σ-代数是 . {,,,}A A ΩΦ 2.若12A ,A 是Ω上的两个非空集合类,i ν是i A (1,2)i =上的测度,若满足:(1) ;(2)112,()()A A A νν?∈=有A ,则称2ν是1ν在2A 上的扩张。 12?A A 3.某集代数包含了所有的左开右闭区间(实数集上的). 该集代数上有一个测度P ,对于任意可测集(,]a b ,其中a b <,均有()(,]P a b b a =-.将该测度扩张到某σ-代数上记为μ.对单点集{}1,{}()1μ= . 0 4.设概率测度空间(),,F P Ω,,,A F B F AB ∈∈=Φ,()()11,23 P A P B ==, 两个简单函数()()()2A A f ωχωχω=+,()()()2B B g ωχωχω=+,则 []E f = ,[]E fg = . 37 ,23 5. 设X 为定义某概率空间上的随机变量,若X 的分布函数为()F x ,则数 学期望EX 的L-S 积分形式为 . ()xdF x +∞ -∞ ?

    6. 设三维随机变量(,,)X Y Z 服从正态分布(,)N a B ,其中()1,2,3a =, 211121112B ?? ? = ? ??? ,则[[|]]E E X YZ = 1 7.设随机过程{(),}t t X -∞<<+∞为平稳二阶矩过程,且均方连续.设该过程的均值函数为1μ=,相关函数(,)2t s R s t e --=,均方积分220 ()X t dt π ?记 为随机变量ξ. 则()E ξ= . π 8.设()N t 为泊松过程,则条件概率((2)2|(3)3)P N N === . 49 9. 设()W t 为参数为2σ的维纳过程,(0)0W =,则()cov (1),(2)W W = . 2σ 二.(8分)设A 是λ系,证明A 是单调类;若A 也是π系,证明A 是σ-代数。 证明:由A 是λ系,若n A ∈A ,n =1,2,…,且↑n A ,则∈+∞ =Y 1n n A A. 若↓n B ,∈n B A ,n =1,2,…,由A 是λ系,∈n B A 且↑n B ,则∈+∞ =Y 1 n n B A. 所以∈+∞=Y 1 n n B A.即∈+∞ =I 1 n n B A ,所以A 是单调类。 4分 A 是λ系,A 对余集运算封闭且∈ΩA ,若A 也是π系, A 对交集运算封闭, 所以A 是集代数。因为A 是单调类,所以A 是σ-代数。 4分 三.(16分)设随机向量),(Y X 的概率密度为0,0,1),() (>>=+-y x e x y x f x y x

    北邮考研面试自我介绍(精选3篇)

    北邮考研面试自我介绍(精选3篇) 北邮考研面试自我介绍(精选3篇) 当去到一个新环境下,时常需要用到自我介绍,自我介绍是一展示自己的手段。那么你真的会写自我介绍吗?下面是小编帮大家整理的北邮考研面试自我介绍(精选3篇),仅供参考,大家一起来看看吧。北邮考研面试自我介绍1 大家好,很荣幸能来参加这次研究生面试,请先允许我自我介绍一下:我叫****,今年**岁。本科就读于*****大学**专业。自从踏入大学门槛的那天起,经过良师的精心指导以及自己的奋力拼搏、自强不息,我逐渐成为了一个能适应社会要求的新时代大学生,并为做一个知识型的社会主义建设者打下坚实的基础。在大学期间,我始终以提高自身的综合素质为目的,以个人的全面发展为奋斗方向,树立正确的人生观、价值观和世界观。为适应社会发展的需求,我认真学习专业知识,发挥自己的特长;挖掘自身的潜力,结合暑期社会实践,从而提高了自己的学习能力和分析处理问题能力。学而知不足是我学习、工作的动力,除了必修课外,还自学Office、Flash、FrontPage2000、Photoshop、DreamweaverMX等软件。在学习之余,我坚持参加各种体育活动与社交活动。在思想行为方面,我作风优良、待人诚恳,能较好处理人际关际,处事冷静稳健,能合理地统筹安排生活中的事务。作为一名研究新生,我所拥有的是年青和知识。年轻也许意味着欠缺经验,但是年轻也意味着热情和活力,我自信能凭自己的能力和学识克服各种困难实现自我的人生价值。我也希望在今后的学习生活中,我能和大家成为学习上的良友与生活中的知己,谢谢! 北邮考研面试自我介绍2尊敬的各位考官、各位评委老师:通过考试,今天,我以本岗位笔试第一的成绩进入了。对我来说,这次机会显得尤为珍贵。我叫***,今年27岁。19XX年7月我从**师范学校艺师美术专业计划内自费毕业。由于从97年起国家不再对自费生包分配,使我与“太阳底下最光辉的职业”失之交臂。幸好,当时河西马厂完小师资不足,经人介绍,我在该完小担任了一年的临时代课教师。回想起那段时光真是既甜蜜又美好,虽然代课工资很低,但听着同学们围在身旁“老师”、“老师”的叫个不停,看着那一双双充满信任的眼睛,那一张张稚气的小脸,生活中的所有不快都顿时烟消云散了。我原想,即使不能转正,只要学校需要,就是当一辈子代课

    Java期末考试题

    2010年——2011年Java期末考试题 一、判断题。 1.Java语言是平台无关的语言。T 2.类的静态方法中可以访问该类的非静态数据成员.F 3.Java中方法调用时参数传递都是按值传递的,因此从方法中退出时,参数的值是不 会变的。T 4.覆盖方法所抛出的异常不能比原方法更多。T 5.Final 方法不能被覆盖。T 6.抽象类中一定包含抽象方法。F 7.接口中的方法必须是抽象方法。T 8.在方法定义中,所以可能发生的异常都必须用try{} catch(){}捕捉。F 9.Java支持多重继承。F 10.Final修饰的类不能派生子类。T 11.覆盖的同名方法中,子类方法不能比父类方法的访问权限更严格。T 12.不能在静态方法中使用this.T 13.抽象类中不能创建对象。T 14.一个类可以实现多接口。T 15.接口中可以包含非静态成员。F 16.不论是否捕捉到异常try{}catch(){} final{}语句中finally块中的代码总要被执行。T 17.一个类实现一个接口,则该类必须实现接口中的所有方法。F 18.线程使用sleep方法去休眠后可以使用notify方法唤醒。F 19.线程使用sleep方法休眠是会释放该线程同步锁定的对象。F 20.Final类中的属性和方法都必须是final的。F 二、选择题 1、Java中复合数据类型不包括(D) A.类类型 B.数组 C.接口类型 D.指针 2、请从四个选项中选择答案,下列代码的执行结果是:(C) Public class Test{ Public static void main(String args[]){ Float t=9.0f; Int q=6; System.out.println((t++)*(--q)); } } A.40 B.40.0 C.45.0 D.36.0 3、下列关于修饰符混用的说法,错误的是(D) A.abstract 不能与final 并列修饰同一个类 B.abstract类中可以有非abstract的方法 C.普通类(非abstract类)中不能有abstract方法 D.static方法中能处理非static的属性 4、关于被保护访问控制符protected修饰的成员变量,以下说法正确的是(A) A.可以被该类自身、与它在同一个包中的其它类、在其它包中的该类的子类所访问B.只能被该类本身和该类的所有的子类访问 C.只能被该类自身所访问 D.只能被同一个包中的类访问 5、x=2,y=3,z=4,则表达式z*=y++*--x的值是(A) A.12 B.24 C.16 D.3 6、以下赋值语句正确的是(D) A.char c1=”a” B.float f1=3.22 C.byte b1=266 D.long L1=0xAC8L 7、Java不支持多重继承,但我们可以通过(B)实现 A.多态 B.接口 C.覆盖 D.抽象类 8.已知类person是类student的父类,以下数组定义和赋值哪些是正确的(A) A. person p[]=new person[3]; p[1]=new student(); B .student s[]=new person[3]; s[1]=new person(); C .person p[]= new student[3];p[1]= new person(); D .student s[]=new student[3];s[1]=new person; 9 编译MyClass.java之后,得到了三个字节码文件:MyClass.class , MyClasslittle$.class MyClass$1.class.这表明(C) A.MyClass类中的两个方法:little和1 B. MyClass.Java中有三个类:MyClass、little和1 C. MyClass类中有两个内部类:一个是命名的little,另一个是匿名的1 D. MyClass、little和1,这三者没什么关系 10、main 方法是java Application 程序执行的入口点,关于main方法的方法头以下(B)是合法的。 A.public static void main() B.public static void main(String arg[]) C.public static int main(String[] arg) D. B.public void main(String arg[]) 11、当编译和运行下面的代码会出现什么情况?(A)

    (完整版)北邮研究生概率论与随机过程2012-2013试题及答案

    北京邮电大学2012——2013学年第1学期 《概率论与随机过程》期末考试试题答案 考试注意事项:学生必须将答题内容(包括填空题)做在试题答题纸上,做在试卷纸上一律无效。在答题纸上写上你的班号和选课单上的学号,班内序号! 一. 单项选择题和填空题:(每空3分,共30分) 1.设A 是定义在非空集合Ω上的集代数,则下面正确的是 .A (A )若A B ∈∈A,A ,则A B -∈A ; (B )若A A B ∈?A,,则B ∈A ; (C )若12n A n =∈?A,,,,则 1 n n A ∞=∈A ; (D )若12n A n =∈?A,,,,且123A A A ??? ,则 1 n n A ∞ =∈A . 2. 设(),ΩF 为一可测空间,P 为定义在其上的有限可加测度,则下面正确的是 .c (A )若A B ∈∈F,F ,则()()()P A B P A P B -=-; (B )若12n A n =∈?F,,,,,且123A A A ??? ,则1 li ( )()m n n n n P A A P ∞→∞ ==; (C )若A B C ∈∈∈F,F,F,,则()()()()P A B C P A P AB P A BC =++; (D )若12n A n =∈?F,,,,,且,i j A i j A =??=/,1 1 ( )()n n n n P P A A ∞ ∞===∑. 3.设f 为从概率空间(),P ΩF,到Borel 可测空间(),R B 上的实可测函数,表达式为100 0()k A k f kI ω==∑,其中1000 ,, i j n n i j A A A ==??=Ω/=,则fdP Ω=? ;

    JAVA语言程序设计期末考试试题及答案

    《JA V A语言程序设计》期末考试试题及答案1(应考必备题库) 一、单选择题 1、编译Java Application 源程序文件将产生相应的字节码文件,这些字节码文件的扩展名为( B )。 A. java B. .class C. html D. .exe 2、设x = 1 , y = 2 , z = 3,则表达式y+=z--/++x 的值是( A )。 A. 3 B. 3. 5 C. 4 D. 5 3、不允许作为类及类成员的访问控制符的是( C )。 A. public B. private C. static D. protected 4、为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为( A )。 A. static void method( ) B. public void method( ) C. final void method( ) D. abstract void method( ) 二、填空题 1、开发与运行Java程序需要经过的三个主要步骤为编辑源程序、 编译生成字节码和解释运行字节码。 2、在Java的基本数据类型中,char型采用Unicode编码方案,每个Unicode码占 用2字节内存空间,这样,无论是中文字符还是英文字符,都是占 用2字节内存空间。 3、设x = 2 ,则表达式( x + + )/3 的值是0 。 4、若x = 5,y = 10,则x < y和x >= y的逻辑值分别为true和false。 5、抽象(abstract) 方法是一种仅有方法头,没有具体方法体和操作实现的方法,该方法必须在抽象类之中定义。最终(final)方法是不能被当前类的子类重新定义的方法。 6、创建一个名为MyPackage 的包的语句是package MyPackage ; , 该语句应该放在程序的位置为:应该在程序第一句。 7、设有数组定义:int MyIntArray[ ] = { 10 , 20 , 30 , 40 , 50 , 60 , 70}; 则执行以下几个语句后的输出结果是120。

    北京邮电大学关于研究生在读期间公开发表学术论文要求的规定(2019年5月修订)

    北京邮电大学关于研究生在读期间公开发表学术论文要求的规定 (2019年5月修订) 北京邮电大学 关于研究生在读期间公开发表 学术论文要求的规定 (2019年5月修订) 目录 北京邮电大学关于研究生在读期间公开发表学术论文要求的规 定 .................... 1 附件: 信息与通信工程学科重要国际学术会议目录 .................................. 3 计算机科学与技术学科中文领域核心期刊目录 (6) 计算机科学与技术学科重要国际期刊目录 .................................... 6 计算机科学与技术学科重要国际学术会议目录 ................................ 8 光学工程学科重要国际学术会议目录 ....................................... 24 软件工程学科中文领域核心期刊目录 ....................................... 26 软件工程学科重要国际学术会议目录 ....................................... 26 涉密研究生进行“等效学术成果”认定的实施细则 . (33) 北京邮电大学 关于研究生在读期间公开发表学术论文要求的规定 第一条学位授予质量特别是博士学位授予质量代表了一个学校的学术水平。研究生在读期间公开发表学术论文是证明其学术水平,获得博士、硕士学位的必要条件。为了保证和进一步提高我校博士、硕士学位授予质量,特制订本规定。 第二条研究生在提出学位论文答辩申请时,必须提供其攻读学位期间以北京邮电大学为第一署名单位正式发表的学术论文、获得的科技奖励或发明专利等能反映其学术水平的相关证明材料。所提供的学术论文必须以研究生本人为第一作者,如本人为第二作者,则第一作者必须是其导师。 第三条博士研究生在读期间公开发表学术论文应达到以下要求: 1、工学、军事学门类:

    Java期末考试试卷1

    信息学院2006—2007学年第二学期期末考试试题A 课程名称:Java 语言程序设计主讲:年级: 班级姓名学号 题号一二三四五合计 分数 一、选择(每题1分,共20分) 1.有一个名为MyClass的public类,想成功编译需满足以下哪个条件?() A. MyClass类中必须定义一个正确的main()方法。 B. MyClass必须定义在MyClass.java源文件中。 C. MyClass类必须定义在MyClass包中。 D. MyClass类必须被导入。 2.以下哪些修饰符不能用于顶层类?( ) A. public B. private C. abstract D. final 3.以下哪个是java中合法的关键字?( ) A. array B. Boolean C. protect D. super 4.以下哪些是合法的标识符?( ) A.%abcd B. 2abcd C. package D. _a_long_name 5.在Java中,一个类可同时定义许多同名的方法,这些方法的形式参数的个数、类型或顺序各不相同。这种面向对象程序的特性称为. () A、隐藏 B、覆盖 C、重载 D、Java不支持此特性 6.有以下代码,请问该程序的运行结果是什么?( ) class Example { public static void main(String args[]){ boolean b=true; System.out.println(b); } } A. 打印输出true B. 打印输出1 C.编译错误 D. 无内容输出 7.以下哪些是基本数据类型?( ) A.int B. String C. Integer D. Float 8. 给出以下代码,请选择正确的选项?( ) class Example{ public static void main(String[] args){ char a=”\u1234”; } } A. 代码编译成功 B. 代码编译成功,但有警告 C. 代码编译失败 9.以下哪个语句用于声明一个二维数组?( ) A. int[5][5] a=new int[][]; B. int a=new int[5,5] C. int[][] a=new int[5][5]; D. int[][] a=new [5]int[5]; 10.给出以下代码,请问该程序的运行结果是什么?()

    --北邮概率论研究生试题答案定稿

    北京邮电大学2012——2013学年第1学期 《概率论与随机过程试题》期末考试试题答案 考试注意事项:学生必须将答题内容(包括填空题)做在试题答题纸上,做在试卷纸上一律无效。在答题纸上写上你的班号和选课单上的学号,班内序号! 一. 单项选择题和填空题:(每空3分,共30分) 1.设A 是定义在非空集合Ω上的集代数,则下面正确的是 .A (A)若A B ∈∈A,A ,则A B -∈A ; (B)若A A B ∈?A,,则B ∈A ; (C)若12n A n =∈?A,,,,则 1 n n A ∞=∈A ; (D)若12n A n =∈?A,,,,且123A A A ??? ,则 1 n n A ∞ =∈A . 2. 设(),ΩF 为一可测空间,P 为定义在其上的有限可加测度,则下面正确的是 .c (A)若A B ∈∈F,F ,则()()()P A B P A P B -=-; (B )若12n A n =∈?F,,,,,且123A A A ??? ,则1 li ( )()m n n n n P A A P ∞→∞ ==; (C)若A B C ∈∈∈F,F,F,,则()()()()P A B C P A P AB P A BC =++; (D)若12n A n =∈?F,,,,,且,i j A i j A =??=/,1 1 ( )()n n n n P P A A ∞ ∞===∑. 3.设f 为从概率空间(),P ΩF,到B orel 可测空间(),R B 上的实可测函数,

    表达式为100 0()k A k f kI ω==∑,其中1000 ,, i j n n i j A A A ==??=Ω/=,则fdP Ω=? ;若 已知100 100!1 !(100)()!2 k k k P A -= ,则2f dP Ω=? . 0 2 10(),2550 2525k k kP A =+=∑ 4. 设二维随机变量(,)X Y 的概率密度 2,01,0, (,)0,x y x f x y <<<? =??? 其他,20(1())E X t dt π ω=? 6. 设{(),0}W t t ≥是参数为2()0σσ>的维纳过程,令1 ()()X t W t =,则相 关函数2 (1,2)2 X R σ= . 7. 设齐次马氏链的状态空间为{1,2,3}E =,一步转移概率为 0.50.500.50.500.20.30.5P ?? ?= ? ???

    java期末考试复习题及答案

    《Java程序设计》课程试卷 1.使用Java语言编写的源程序保存时的文件扩展名是( B )。 (A).class (B).java (C).cpp (D).txt 2.设int a=-2,则表达式a>>>3的值为( C )。 (A)0 (B)3 (C)8 (D)-1 3.设有数组的定义int[] a = new int[3],则下面对数组元素的引用错误的是( C )。 (A)a[0]; (B)a[a.length-1]; (C)a[3]; (D)int i=1; a[i]; 4.在类的定义中可以有两个同名函数,这种现象称为函数( D )。 (A)封装(B)继承(C)覆盖(D)重载 5.在类的定义中构造函数的作用是( D )。 (A)保护成员变量(B)读取类的成员变量(C)描述类的特征(D)初始化成员变量 6.下面关键字中,哪一个不是用于异常处理语句( B )。 (A)try (B)break (C)catch (D)finally 7.类与对象的关系是( A )。 (A)类是对象的抽象(B)对象是类的抽象(C)对象是类的子类(D)类是对象的具体实例 8.下面哪一个是Java中不合法的标识符( D )。 (A)$persons (B)twoNum (C)_myVar (D)*point 9.为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为( A )。 (A)static void method( ) (B)public void method( ) (C)final void method( ) (D)abstract void method( ) 10.欲构造ArrayList类的一个实例,此类继承了List接口,下列哪个方法是正确的( C )。 (A)ArrayList myList=new Object( ) (B)List myList=new ArrayList( ) (C)ArrayList myList=new List( ) (D)List myList=new List( ) 11.Java源文件和编译后的文件扩展名分别为( B ) (A) .class和 .java (B).java和 .class (C).class和 .class (D) .java和 .java

    北京邮电大学关于研究生在读期间公开发表学术论文要求的规定(2016年5月修订)

    北京邮电大学 关于研究生在读期间公开发表学术论文要求的规定 (2016年5月修订)

    目录 北京邮电大学关于研究生在读期间公开发表学术论文要求的规定 (1) 附件: 信息与通信工程学科重要国际学术会议目录 (3) 计算机科学与技术学科中文领域核心期刊目录 (6) 计算机科学与技术学科重要国际期刊目录 (6) 计算机科学与技术学科重要国际学术会议目录 (8) 光学工程学科重要国际学术会议目录 (24) 软件工程学科中文领域核心期刊目录 (26) 软件工程学科重要国际学术会议目录 (26) 涉密研究生进行“等效学术成果”认定的实施细则 (33)

    北京邮电大学 关于研究生在读期间公开发表学术论文要求的规定 第一条学位授予质量特别是博士学位授予质量代表了一个学校的学术水平。研究生在读期间公开发表学术论文是证明其学术水平,获得博士、硕士学位的必要条件。为了保证和进一步提高我校博士、硕士学位授予质量,特制订本规定。 第二条研究生在提出学位论文答辩申请时,必须提供其攻读学位期间以北京邮电大学为第一署名单位正式发表的学术论文、获得的科技奖励或发明专利等能反映其学术水平的相关证明材料。所提供的学术论文必须以研究生本人为第一作者,如本人为第二作者,则第一作者必须是其导师。 第三条博士研究生在读期间公开发表学术论文应达到以下要求: 1、工学、军事学门类: (1)以第一作者身份在SCI收录刊源上正式发表论文至少2篇;或以第一作者身份在SCI收录刊源上正式发表论文1篇和在EI收录刊源或附件中本学科指定的重要国际学术会议上发表论文至少2篇。 (2)在《北京邮电大学学报》、同一次国际会议上发表的论文,不论多少篇,在申请学位时只按1篇计算。 注1:计算机科学与技术学科博士研究生以第一作者身份在附件中中国计算机学会推荐的A类期刊、A类会议上发表论文1篇(不含短文、摘要、报道、Workshop、Poster等),即视同满足本规定的论文数量要求。 注2:软件工程学科博士研究生以第一作者身份在附件中本学科中文领域核心期刊或在附件中本学科指定的重要国际学术会议上发表论文1篇可等同于发表在SCI收录刊源上的论文1篇。 2、管理学门类: (1)以第一作者身份正式发表3篇以上(含3篇)论文,其中:至少2篇发表在CSSCI或EI收录刊源上。 (2)以第一作者身份正式发表在SCI、SSCI收录刊源上的论文1篇等同于发表在CSSCI收录刊源上的论文2篇。 (3)在北京邮电大学主办的刊物、同一次国际会议上发表的论文,不论多少篇,在申请学位时只按1篇计算。 第四条硕士研究生在读期间公开发表学术论文应达到以下要求之一: 1、至少在公开发行的学术性刊物或全国性学术会议或国际学术会议或国内外二级以上学会会议论文集以第一作者身份正式发表1篇学术论文;

    南邮学长考研北邮调剂、刷楼上岸经验分享-些许感受

    些许感受(调剂、刷楼) 注:原文由2019北邮考研录取学长(本科南邮)所写,经历调剂刷楼等艰辛过程,最终成功录取。写此经验留给外校同学以及调剂同学以参考。 初试不努力,调剂两行泪。拟录取名单出来了,总想着写点什么,一方面纪念下这段考研时光,另一方面是希望能给后来的学弟学妹一些有用的东西吧。 ——题记 写在前面:本文纯属个人体验以及感受,求轻喷。如有政策变化,请以当年政策为准,仅供参考。 本人2019年考研,报考的是北邮的信通院的通信学硕,总分376,政治59,英语一70,数学一116,通信原理131,分数不上不下,原报的组因为只收两个人的原因,所以进不了复试只能调剂,刷楼期间也有信通院的其他组老师伸来橄榄枝(后面会详细说说刷楼是个神马东西),但是最终选择了光研院,因为有几个风评不太好还有几个研

    究方向不喜欢,我不愿意在不喜欢的事情上花几年时间,这是找调剂的最后倔强。 也不知从何说起,就按照时间顺序说吧。 首先,复习这方面,好像许多人现在就开始准备了吧。关于复习因为我考的也不是太好,所以也说不上来什么,不过如果有什么问题也可以私信我,知无不言。 其次,就到了选学院的时候了。信息与通信工程(工学)电子与通信工程(工程),北邮主要有三个学院招收该专业:信息与通信工程学院(信通院),电子科学与工程学院(电子院),信息光子学与光通信研究院(光研院),这三个学院各有其方向,顾名思义即可,其实没有什么高低上下之分只是研究方向不同而已。考研难度上一般来说,注意是一般来说!信通院>电子院>光研院,考研难度学硕>专硕。 提醒:许多同学在报考的时候比较盲目,只知道头铁去报信通院。成绩出来了之后,大批同学又开始疯狂调剂到光研院等,而在调剂时分数就不值钱了。好多同学340+去找调剂,放眼望去360+找调剂的还有一大批,如果在一开始没有头铁非要去信通院这条独木桥,340+在电子院或者光研院就可以进入一个不错的导师组了。所以理性一点,综合考虑下自己的情况,选择学院。

    java期末考试试题(含答案)

    模拟B卷 考试说明: 1.使用Eclipse编写程序。项目名称为:班级_姓名_学号_卷号。注意:卷号为A或B 2.在项目文件夹下新建一个文本文件,文件名为:答案.txt 3.将编程题外的所有题目写在文本文件中,答案要标明题号。 注意:考试期间遇到死机等问题,需要请示老师,切勿自行解决。否则后果自负。 一、单项选择题:共20题,每小题1分,满分20分 1、下列选项中,不属于Java语言特点的一项是。( D ) A、安全性 B、分布式 C、面向对象 D、编译执行 2、Java语言和c++语言相比,哪一项是Java有的,而c++没有?( C ) A、面向对象 B、有类库 C、跨平台 D、动态链接 3、如下哪个不是Java中有效的变量名。( A ) A、 if B、hello C、name D、good 4、下列不属于Java保留字的一个是( B )。 A、else B、Unicode C、if D、static 5、现有2个char,类型的变量al=’a’、a2=2,当执行al=(char)(al+a2);语句之后,al的值应 该是( C )。 A、’a’ B、12 C、’c’ D、语句在编译时出错 6、下列关于int类型和long类型的说法中,正确的一个是( A )。 A、int类型可以自动转换为long类型 B、long类型可以自动转换为int类型 C、long类型占的存储空间比int类型的小 D、long类型和int类型数据能表示整数的范围一样 7、下列类的定义中,错误的是( B )。 A、class y{ .... } B、public x extends y{ .... } C、public class x extends y{ .... } D、class x extends y implements y1{ .... } 8、执行语句int i = 1, j = ++i; 后i与j的值分别为( D )。 A、1与1 B、2与1 C、1与2 D、2与2 9、为了区分重载多态中同名的不同方法,要求( C )。 A、调用时用类名或对象名做前缀 B、返回值类型不同 C、形式参数个数或者类型不同 D、形式参数名称不同 10、定义类头时能使用的修饰符是( C )。 A、private B、static C、protected D、abstract 11、如果在编译Java程序时,编译结果报告说找不到要编译的代码,错误是( D )

    相关文档
    最新文档