Java经典编程30题(中)

11.冒泡排序:依次比较相邻的两个数,将大数放在前面,小数放在后面。第一趟结束,在最后的数必是所有数中的最小数。重复以上过程,直至最终完成排序。由于在排序过程中总是大数往前放,小数往后放,相当于气泡往上升,所以称作冒泡排序。请用JAVA语言编写一个完成冒泡排序算法的程序。

解答:

int[] bubbleSort(int before[]) {

int t;

for (int i = 0; i < before.length; i++) {

for (int j = 0; j < before.length – i – 1; j++) {

if (before[j] > before[j + 1]) {

t = before[j];

before[j] = before[j + 1];

before[j + 1] = t;

}

}

}

return before;

}

12.写出一段socket通讯(客户端)的代码,功能描述如下:

a)客户端发起socket通讯,报文结构为报文号(3位)+用户名(5位)+密码(8位)+ 结束符(固定为END)。此处报文号为100

b)服务端收到后返回应答报文,报文结构为报文号(3位)+验证结果(2位)+结束符(固定为END)。此处报文号为101

c)Socket服务器ip为192.168.0.2,端口号为9999

解答:

客户端代码:

Socket sk = new Socket(“192.168.0.2″,9999);

OutputStream os = sk.getOutputStream();

PrintWriter pw = new PrintWriter(os,true);

pw.write(“100stone888888END”);

pw.close();

sk.close();

服务器端代码:

ServerSocket vk = new ServerSocket(9999);

Socket sk = vk.accept();

OutputStream os = sk.getOutputStream();

PrintWriter pw = new PrintWriter(os,true);

pw.write(“101oldEND”);

pw.close();

sk.close();

13.编写函数insert(String str),将字符串”a,123;b,456;c,789”置入HashMap中。

解答:

import java.util.HashMap;

public class HashMapDemo {

HashMap<String,String> map=new HashMap<String,String>();

public void insert(String str){

map.put(“a”, str);

}

public static void main(String[] args) {

HashMapDemo demo=new HashMapDemo();

demo.insert(“a,123;b,456;c,789″);

}

}

14.有一数组 a[1000]存放了1000 个数,这 1000个数取自1-999, 且只有两个相同的数,剩下的 998个数不同, 写一个搜索算法找出相同的那个数的值(请用 C# or JAVA编程实现,注意空间效率和时间效率尽可能优化)。

解答:

import java.util.Arrays;

public class SearchDemo {

/** 被搜索数据的大小 */

private static final int size = 1000;

public static void main(String[] args) {

int[] data = new int[size];

// 添加测试数据

for (int k = 0; k < data.length; k++) {

data[k] = k + 1;

}

data[999] = 567;

result(data);

}

/**

* 调用分搜索算法的方法实现查找相同元素

* @param data

*/

public static void result(int data[]){

Arrays.sort(data);

for (int i = 0; i < data.length; i++) {

int target = data[i];

data[i] = 0;

int result = binaryFind(data, target);

if (result != -1) {

System.out.println(“相同元素为:”+data[result]);

break;

}

}

}

/**

* 二分搜索算法实现

*

* @param data

* 数据集合

* @param target

* 搜索的数据

* @return 返回找到的数据的位置,返回-1表示没有找到。

*/

public static int binaryFind(int[] data, int target) {

int start = 0;

int end = data.length – 1;

while (start <= end) {

int middleIndex = (start + end) / 2;

if (target == data[middleIndex]) {

return middleIndex;

}

if (target >= data[middleIndex]) {

start = middleIndex + 1;

} else {

end = middleIndex – 1;

}

}

return -1;

}

}

15.下面是一个由*号组成的4行倒三角形图案。要求:1、输入倒三角形的行数,行数的取值3-21之间,对于非法的行数,要求抛出提示“非法行数!”;2、在屏幕上打印这个指定了行数的倒三角形。

*******

*****

***

*

解答:

import java.util.Scanner;

public class Lines {

public static void main(String args[]) {

Scanner scanner = new Scanner(System.in);

int lines = scanner.nextInt();

if (lines > 3 && lines < 21) {

for (int i = lines-1; i >= 0; i–) {

for (int z = 0; z <= i * 2; z++) {

System.out.print(“*”);

}

System.out.print(“ ”);

}

}else{

System.out.println(“非法行数!”);

}

}

}

16.现有一个32位的整型变量 value和一个有32个元素的数组a[32],要求:1、对value随机赋值;2、让数组a[n]的值等于value“位n”的值,0<=n<=31。举例:如果value的“位0”(Bit0)=0,那么a[0]=0;如果value的“位10”(Bit10)=1,那么a[10]=1。

解答:

public class Foo {

public static void main(String[] args) {

//产生随机数

int random = (int) (Math.random() * Integer.MAX_VALUE + 1);

//转成二进制字符串

String str=Integer.toBinaryString(random);

//转成二进制时最前面的零被省略,补上省略的0

if(str.length()<32){

for(int j=0;j<=32-str.length();j++){

str=”0″+str;

}

}

//给数组赋值

int[] a=new int[32];

for(int i=0;i<str.length();i++){

a[i]=Integer.parseInt(String.valueOf(str.charAt(i)));

System.out.println(“a[“+i+”]=”+a[i]);

}

}

}

17.现有1~100共一百个自然数,已随机放入一个有98个元素的数组a[98]。要求写出一个尽量简单的方案,找出没有被放入数组的那2个数,并在屏幕上打印这2个数。注意:程序不用实现自然数随机放入数组的过程。

答:

int[] b = new int[]{….存入98个随机的1~100的整数}; int[] a = new int[100]; for(int t : b) a[t-1]=t; for(int t=0; t < a.length; t++) if(a[t]==0) System.out.println(t+1);

18. 实现函数public String[ ] array(List list),其中参数list中元素类型为字符串

解答:

public String[] array(List list) {

String[] elementData = new String[list.size()];

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

elementData[i]=(String)list.get(i);

}

return elementData ;

}

19.创建类Person,其中存储的成员数据为:age(int),sex(boolean),weight(int),至少有一个构造函数可以初始化这三个属性值,同时提供获取这三个属性值的public方法

解答:

public class Person {

private int age;

private boolean sex;

private int weight;

public Person() {

}

public Person(int age, boolean sex, int weight) {

this.age = age;

this.sex = sex;

this.weight = weight;

}

public int getAge() {

return age;

}

public boolean isSex() {

return sex;

}

public int getWeight() {

return weight;

}

}

20.设计线程类WorkerThread,其构造函数接受一个message字符串作为参数,把该字符串打印到console上,同时,在WorkThread的main函数中启动该线程。

解答:

public class WorkerThread extends Thread {

public WorkerThread(String message) {

System.out.println(message);

}

public static void main(String[] args) {

new WorkerThread(“hello world!”).start();

}

}

1、转载来源于 https://blog.csdn.net/wickedvalley/article/details/51589792

2、想要转载请注明转载来源

原文地址:https://www.cnblogs.com/pressur/p/11191307.html