首页 java经典编程题 [资料]

java经典编程题 [资料]

举报
开通vip

java经典编程题 [资料]java经典编程题 [资料] java经典编程题 三 编程题(30) 1.编程实现:二分搜索算法 解答: public class SearchTest { /** 被搜索数据的大小 */ private static final int size = 5000000; public static void main(String[] args) { long[] data = new long[size]; // 添加测试数据 for (int k = 0; k = data[middleIn...

java经典编程题 [资料]
java经典编程题 [资料] java经典编程题 三 编程题(30) 1.编程实现:二分搜索算法 解答: public class SearchTest { /** 被搜索数据的大小 */ private static final int size = 5000000; public static void main(String[] args) { long[] data = new long[size]; // 添加测试数据 for (int k = 0; k < data.length; k++) { data[k] = k; } // 要查找的数据 long target = 4970002; binaryFindTest(data, target); } /** * 二分搜索算法实现 * * @param data * 数据集合 * @param target * 搜索的数据 * @return 返回找到的数据的位置,返回-1 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示没有找到。 */ public static int binaryFind(long[] data, long 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; } /** * 二分搜索测试 * * @param data * 数据集合 * @param target * 搜索的数据 */ public static void binaryFindTest(long[] data, long target) { long start = System.nanoTime(); int result = binaryFind(data, target); long end = System.nanoTime(); System.out.println("binary search position:" + result); System.out.println("binary search time:" + (end - start)); } } 2.编程实现:线程A向队列Q中不停写入数据,线程B从队列Q中不 停读取数据(只要Q中有数据)。 解答: 接口中有两个一个是向队列中写push 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 一个是从队列中读。 public interface StackInterface { public void push(int n); public int[] pop(); } 上边接口的实现类。 public class SafeStack implements StackInterface { private int top = 0; private int[] values = new int[10]; private boolean dataAvailable = false; public void push(int n) { synchronized (this) { while (dataAvailable) // 1 { try { wait(); } catch (InterruptedException e) { // 忽略 //2 } } values[top] = n; System.out.println("压入数字" + n + "步骤1完成"); top++; dataAvailable = true; notifyAll(); System.out.println("压入数字完成"); } } public int[] pop() { synchronized (this) { while (!dataAvailable) // 3 { try { wait(); } catch (InterruptedException e) { // 忽略 //4 } } System.out.print("弹出"); top--; int[] test = { values[top], top }; dataAvailable = false; // 唤醒正在等待压入数据的线程 notifyAll(); return test; } } } 读线程 public class PopThread implements Runnable { private StackInterface s; public PopT { this.s = s; } public void run() { while(true) { System.out.println("->"+ s.pop()[0] + "<-"); try { Thread.sleep(100); } catch(InterruptedException e){} } } } 写线程 public class PushThread implements Runnable { private StackInterface s; public PushThread(StackInterface s) { this.s = s; } public void run() { int i = 0; while(true) { java.util.Random r = new java.util.Random(); i = r.nextInt(10); s.push(i); try { Thread.sleep(100); } catch(InterruptedException e){} } } } 3.编程实现:使用Socket经行网络通信时,客户端和服务器端 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 。 解答: 服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保 留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024 的端口),等待客户连接请求, 客户连接后,会话产生;在完成会话后,关闭连接。 客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开 会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024 以上的端口。 4.编写代码实现同一平面内两圆是否碰撞,其中: 第一个圆圆心坐标为(x1,y1),半径是r1,第二个圆圆心坐标为(x2,y2),半径是r2。 方法声明如下: boolean collisWith(int x1,int y1,int r1,int x2,int y2,int r2){} 解答: boolean collisWith(int x1, int y1, int r1, int x2, int y2, int r2) { boolean flag=false; int num1=(x1-x2)*(x1-x2); int num2=(y1-y2)*(y1-y2); int num3=num1+num2; double distance=Math.sqrt(num3); if(distance<=(r1+r2)){ flag=true; } return flag; } 5.判断一个int数组中的元素是否存在重复,方法声明如下: boolean isRepeat(int[] m){ } 解答: public boolean isRepeat2(int[] m){ Set h =new HashSet(m.length); for (int i = 0; i < m.length; i++) { h.add(new Integer(m[i])); } if (h.size()==m.length ){ return false; }else { return true; } } 6.用递归方法实现正序显示数组元素。例如String[] s = {“a”,”b”,”c”,”d”}; 方法声明如下: void print(String[] s,int i){ } 解答:参数 i 是指打印string数组的起始位置,原理是正序打印s从第0个开始的所有字符串,等 价于先打印第0个,在打印s中从第一个开始的所有字符串,如此递归 void print(String[] s, int i) { if ((i >= 0) && (i < s.length)) { System.out.print(s[i]); i++; print(s, i); } } 7.请写出求n~的算法。 解答: public class Factorial { public static void main(String[] long n = 6; System.out.println(doFactorial(n)); } public static long doFactorial(long n) { if (n < 1) { System.out.println("ERROR"); return 0; } else if (n == 1 || n == 2) { return n; } else { return n * doFactorial(n - 1); } } } 8.在当前的JSP网页里,提交用户名和密码,提交给post . jsp, post . jsp打印出用户名和密码 并返回给浏览器。请写出post . jsp 解答: 假设页面用户名和密码在login.jsp里,login.jsp页面代码如下:
post.jsp页面代码: <% String userName=request.getParameter(“userName”); String pwd=request.getParameter(“pwd”); out.println(“用户名:”+userName+”,密码:”+pwd); %> 9.编写一个字符界面的Java Application 程序,接受用户输入的10 个整数,并输出这10个整数的 最大值和最小值。 解答:采用了冒泡进行排序 import java.util.Scanner; import java.util.Scanner; public class MaxAndMin { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int[] arr = new int[10]; for (int i = 0; i < arr.length; i++) { int next = scanner.nextInt(); arr[i] = next; } int[] after=Arrays.sort(arr); System.out.println("最小值:"+after[0]+",最大值:"+after[arr.length-1]); } } 10.写一个排序算法 1-100随机数字 进行排序 要求效率。 解答: public class Sort { // 选择排序方法 public static void selectionSort(int[] number) { for (int i = 0; i < number.length - 1; i++) { int m = i; for (int j = i + 1; j < number.length; j++) { if (number[j] < number[m]) m = j; } if (i != m) swap(number, i, m); } } // 用于交换数组中的索引为i、j的元素 private static void swap(int[] number, int i, int j) { int t; t = number[i]; number[i] = number[j]; number[j] = t; } public static void main(String[] args) { // 定义一个数组 int[] num = new int[100]; for(int i=0;i 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 map=new HashMap(); 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 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 ,找出没有被放入数组的那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 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 线程类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(); } } 21.写一个函数去掉一个字符串中单词间多余的空格,使得相邻两个单词间有且只有一个空格。例如 当输入字符串是“Hello!_ _Game_programming_ _world!”时,调用 该函数后字符串变为 “Hello!_Game_programming_world!”。 解答: /** * 去除字符串中多余的空格 * * @param s * 需要处理的字符串 * @return 处理后的字符串 */ public String trimSpace(String before) { String temp= "" + before.charAt(0); for (int i = 1; i < before.length(); i++) { char c = before.charAt(i); // 如果当前字符是空格 if (c == ' ') { // 判断前一个不是是空格则添加,否则不添加 if (before.charAt(i - 1) != ' ') { temp += c; } } else { temp += c; } } return temp; } 22. 编写一个程序,用来计算1到100间所有整数的和是多少, 解答: public static void GetSum() { int sum = 0; for(int i=1;i<=100;i++) { sum+=i; } System.out.println("和为:"+sum); } 23.请简单写出用JAVA连接Oracle数据库,并执行一条/SQL语句。(只需要写关键几条语句即可,/SQL 语句:SELECT*FROM t_users WHERE users_id=‘1111’) 解答: Class.forName("oracle.jdbc.OracleDriver"); String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl"; String user = "scott"; String password = "tiger"; Connection con = DriverManager.getConnection(url, user, password); Statement stm = con.createStatement(); ResultSet rs = stm .executeQuery("SELECT*FROM t_users WHERE users_id='1111'"); while (rs.next()) { // 取值 } rs.close(); stm.close(); con.close(); 24.在web应用开发过程中经常遇到输出某种编码的字符,如从GBK到iso8859-1等,如何输出一个 某种编码的字符串, public stat String tempStr = ""; try { tempStr = new String(str.getBytes("ISO-8859-1"), "GBK"); tempStr = tempStr.trim(); } catch (Exception e) { System.err.println(e.getMessage()); } return tempStr; } 25. 请写出一个公用方法,输入String返回该串是否含有非空字符,并写出junit的测试用例 答: public class TestString { public static boolean hasBlank(String str) { if (str.endsWith("") || str.startsWith("")) { return false; } else { String[] strs = str.split(""); if (strs.length == 1) { return false; } } return true; } @Test public void testFun() { System.out.println(TestString.hasBlank("test")); } } 26. JAVA实现一种排序 答:用插入法进行排序代码如下 package com.tarena; import java.util.*; class InsertSort { ArrayList list; public InsertSort(int num,int mod) { list = new ArrayList(num); Random rand = new Random(); System.out.println("The ArrayList Sort Before:"); for (int i=0;i='0' && beforechars[i]<='9'){ afterchars[j++]=beforechars[i]; } } Arrays.sort(afterchars); for(int i=(afterchars.length-j);i0){ Object obj = list.get(list.size()-1); list.remove(list.size()-1); return obj; }else{ return null; } } public int getNumber(){ return list.size(); } } class IntegerQueue { public int[] integerQueue;// 用来当队列 public int tail;// 队尾 public int size;// 队的长度,也可以设置一个默认值,溢出时从 新申请 public IntegerQueue(int size) { integerQueue = new int[size]; this.size = size; tail = 0; } public void inQueue(int i) { if (tail < size) { this.integerQueue[tail] = i; tail++; } else { System.err.println("溢出啦~"); } } public int outQueue() { if (tail >= 0) { int tmp = this.integerQueue[tail]; tail--; return tmp; } else { System.err.println("队列为空~"); throw new RuntimeException(); } } } 30. 假定屏幕的像素宽度为screenWidth,写一个函数计算一个字符串需要分成几行显示。 要求: 1)、每行应尽可能多地显示字符,但不能有字符部分或完全显示在屏幕外。超过部分的字符换下一行 显示。 2)、每个字符的像素宽度不一样,每个字符的像素宽度不一样。用int GetCharWidth(char c)获得每 个字符的像素宽度。 /** * 计算一个字符串 * * @param s * 原始字符串 * @param screenWidth * 屏幕宽度 * @return 行数 */ int calcLineNum(String s, int screenWidth) { int length = 0; // 行数 int n = 0; // 统计长度 for (int i = 0; i < s.length(); i++) { // 当前字符的宽度 int charLen = GetCharWidth(s.charAt(i)); // 总长度增加 length += charLen; // 如果达到屏幕宽度 if (length > screenWidth) { n++; // 行数+1 length = charLen; // 重新计算长度 } } // 最后一行处理 if (length > 0) { n++; } return n; }
本文档为【java经典编程题 [资料]】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_737352
暂无简介~
格式:doc
大小:68KB
软件:Word
页数:35
分类:互联网
上传时间:2018-01-16
浏览量:113