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(“\n”);

}

}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、想要轉載請注明轉載來源


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM