Java笔试题库之编程题库 总共30道编程题,掌握了就可以应付中级以内Java面试题
1.編程實(shí)現(xiàn):二分搜索算法
解答:
public class SearchTest {
/** 被搜索數(shù)據(jù)的大小 */
private static final int size = 5000000;
public static void main(String[] args) {
long[] data = new long[size];
// 添加測(cè)試數(shù)據(jù)
for (int k = 0; k < data.length; k++) {
data[k] = k;
}
// 要查找的數(shù)據(jù)
long target = 4970002;
binaryFindTest(data, target);
}
/**
* 二分搜索算法實(shí)現(xiàn)
*
* @param data
* 數(shù)據(jù)集合
* @param target
* 搜索的數(shù)據(jù)
* @return 返回找到的數(shù)據(jù)的位置,返回-1表示沒(méi)有找到。
*/
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;
}
/**
* 二分搜索測(cè)試
*
* @param data
* 數(shù)據(jù)集合
* @param target
* 搜索的數(shù)據(jù)
*/
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.編程實(shí)現(xiàn):線程A向隊(duì)列Q中不停寫(xiě)入數(shù)據(jù),線程B從隊(duì)列Q中不停讀取數(shù)據(jù)(只要Q中有數(shù)據(jù))。
解答:
接口中有兩個(gè)一個(gè)是向隊(duì)列中寫(xiě)push方法 一個(gè)是從隊(duì)列中讀。
public interface StackInterface
{
public void push(int n);
public int[] pop();
}
上邊接口的實(shí)現(xiàn)類。
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(“壓入數(shù)字” + n + “步驟1完成”);
top++;
dataAvailable = true;
notifyAll();
System.out.println(“壓入數(shù)字完成”);
}
}
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;
// 喚醒正在等待壓入數(shù)據(jù)的線程
notifyAll();
return test;
}
}
}
讀線程
public class PopThread implements Runnable
{
private StackInterface s;
public PopThread(StackInterface s)
{
this.s = s;
}
public void run()
{
while(true)
{
System.out.println(“->”+ s.pop()[0] + “<-”);
try {
Thread.sleep(100);
}
catch(InterruptedException e){}
}
}
}
寫(xiě)線程
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.編程實(shí)現(xiàn):使用Socket經(jīng)行網(wǎng)絡(luò)通信時(shí),客戶端和服務(wù)器端流程。
解答:
服務(wù)器,使用ServerSocket監(jiān)聽(tīng)指定的端口,端口可以隨意指定(由于1024以下的端口通常屬于保留端口,在一些操作系統(tǒng)中不可以隨意使用,所以建議使用大于1024的端口),等待客戶連接請(qǐng)求,客戶連接后,會(huì)話產(chǎn)生;在完成會(huì)話后,關(guān)閉連接。
客戶端,使用Socket對(duì)網(wǎng)絡(luò)上某一個(gè)服務(wù)器的某一個(gè)端口發(fā)出連接請(qǐng)求,一旦連接成功,打開(kāi)會(huì)話;會(huì)話完成后,關(guān)閉Socket。客戶端不需要指定打開(kāi)的端口,通常臨時(shí)的、動(dòng)態(tài)的分配一個(gè)1024以上的端口。
4.編寫(xiě)代碼實(shí)現(xiàn)同一平面內(nèi)兩圓是否碰撞,其中:
第一個(gè)圓圓心坐標(biāo)為(x1,y1),半徑是r1,第二個(gè)圓圓心坐標(biāo)為(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.判斷一個(gè)int數(shù)組中的元素是否存在重復(fù),方法聲明如下:
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.用遞歸方法實(shí)現(xiàn)正序顯示數(shù)組元素。例如String[] s = {“a”,”b”,”c”,”d”};
方法聲明如下:
void print(String[] s,int i){ }
解答:參數(shù) i 是指打印string數(shù)組的起始位置,原理是正序打印s從第0個(gè)開(kāi)始的所有字符串,等價(jià)于先打印第0個(gè),在打印s中從第一個(gè)開(kāi)始的所有字符串,如此遞歸
void print(String[] s, int i) {
if ((i >= 0) && (i < s.length)) {
System.out.print(s[i]);
i++;
print(s, i);
}
}
7.請(qǐng)寫(xiě)出求n!的算法。
解答:
public class Factorial {
public static void main(String[] args) {
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.在當(dāng)前的JSP網(wǎng)頁(yè)里,提交用戶名和密碼,提交給post . jsp, post . jsp打印出用戶名和密碼并返回給瀏覽器。請(qǐng)寫(xiě)出post . jsp
解答:
假設(shè)頁(yè)面用戶名和密碼在login.jsp里,login.jsp頁(yè)面代碼如下:
<form action=”post.jsp” method=”post”>
<input type=”text” name=”userName”>
<input type=”password” name=”pwd”>
<input type=”submit”>
</form>
post.jsp頁(yè)面代碼:
<%
String userName=request.getParameter(“userName”);
String pwd=request.getParameter(“pwd”);
out.println(“用戶名:”+userName+”,密碼:”+pwd);
%>
9.編寫(xiě)一個(gè)字符界面的Java Application 程序,接受用戶輸入的10個(gè)整數(shù),并輸出這10個(gè)整數(shù)的最大值和最小值。
解答:采用了冒泡進(jìn)行排序
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.寫(xiě)一個(gè)排序算法 1-100隨機(jī)數(shù)字 進(jìn)行排序 要求效率。
解答:
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);
}
}
// 用于交換數(shù)組中的索引為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) {
// 定義一個(gè)數(shù)組
int[] num = new int[100];
for(int i=0;i<num.length;i++){
num[i]=(int)(Math.random()*100)+1;
}
// 排序
selectionSort(num);
for (int i = 0; i < num.length; i++) {
System.out.println(num[i]);
}
}
}
11.冒泡排序:依次比較相鄰的兩個(gè)數(shù),將大數(shù)放在前面,小數(shù)放在后面。第一趟結(jié)束,在最后的數(shù)必是所有數(shù)中的最小數(shù)。重復(fù)以上過(guò)程,直至最終完成排序。由于在排序過(guò)程中總是大數(shù)往前放,小數(shù)往后放,相當(dāng)于氣泡往上升,所以稱作冒泡排序。請(qǐng)用JAVA語(yǔ)言編寫(xiě)一個(gè)完成冒泡排序算法的程序。
解答:
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.寫(xiě)出一段socket通訊(客戶端)的代碼,功能描述如下:
a)客戶端發(fā)起socket通訊,報(bào)文結(jié)構(gòu)為報(bào)文號(hào)(3位)+用戶名(5位)+密碼(8位)+ 結(jié)束符(固定為END)。此處報(bào)文號(hào)為100
b)服務(wù)端收到后返回應(yīng)答報(bào)文,報(bào)文結(jié)構(gòu)為報(bào)文號(hào)(3位)+驗(yàn)證結(jié)果(2位)+結(jié)束符(固定為END)。此處報(bào)文號(hào)為101
c)Socket服務(wù)器ip為192.168.0.2,端口號(hào)為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();
服務(wù)器端代碼:
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.編寫(xiě)函數(shù)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.有一數(shù)組 a[1000]存放了1000 個(gè)數(shù),這 1000個(gè)數(shù)取自1-999, 且只有兩個(gè)相同的數(shù),剩下的 998個(gè)數(shù)不同, 寫(xiě)一個(gè)搜索算法找出相同的那個(gè)數(shù)的值(請(qǐng)用 C# or JAVA編程實(shí)現(xiàn),注意空間效率和時(shí)間效率盡可能優(yōu)化)。
解答:
import java.util.Arrays;
public class SearchDemo {
/** 被搜索數(shù)據(jù)的大小 */
private static final int size = 1000;
public static void main(String[] args) {
int[] data = new int[size];
// 添加測(cè)試數(shù)據(jù)
for (int k = 0; k < data.length; k++) {
data[k] = k + 1;
}
data[999] = 567;
result(data);
}
/**
* 調(diào)用分搜索算法的方法實(shí)現(xiàn)查找相同元素
* @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;
}
}
}
/**
* 二分搜索算法實(shí)現(xiàn)
*
* @param data
* 數(shù)據(jù)集合
* @param target
* 搜索的數(shù)據(jù)
* @return 返回找到的數(shù)據(jù)的位置,返回-1表示沒(méi)有找到。
*/
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.下面是一個(gè)由*號(hào)組成的4行倒三角形圖案。要求:1、輸入倒三角形的行數(shù),行數(shù)的取值3-21之間,對(duì)于非法的行數(shù),要求拋出提示“非法行數(shù)!”;2、在屏幕上打印這個(gè)指定了行數(shù)的倒三角形。
*******
*****
***
*
解答:
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(“非法行數(shù)!”);
}
}
}
16.現(xiàn)有一個(gè)32位的整型變量 value和一個(gè)有32個(gè)元素的數(shù)組a[32],要求:1、對(duì)value隨機(jī)賦值;2、讓數(shù)組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) {
//產(chǎn)生隨機(jī)數(shù)
int random = (int) (Math.random() * Integer.MAX_VALUE + 1);
//轉(zhuǎn)成二進(jìn)制字符串
String str=Integer.toBinaryString(random);
//轉(zhuǎn)成二進(jìn)制時(shí)最前面的零被省略,補(bǔ)上省略的0
if(str.length()<32){
for(int j=0;j<=32-str.length();j++){
str=”0″+str;
}
}
//給數(shù)組賦值
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.現(xiàn)有1~100共一百個(gè)自然數(shù),已隨機(jī)放入一個(gè)有98個(gè)元素的數(shù)組a[98]。要求寫(xiě)出一個(gè)盡量簡(jiǎn)單的方案,找出沒(méi)有被放入數(shù)組的那2個(gè)數(shù),并在屏幕上打印這2個(gè)數(shù)。注意:程序不用實(shí)現(xiàn)自然數(shù)隨機(jī)放入數(shù)組的過(guò)程。
答:
int[] b = new int[]{….存入98個(gè)隨機(jī)的1~100的整數(shù)}; 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. 實(shí)現(xiàn)函數(shù)public String[ ] array(List list),其中參數(shù)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.創(chuàng)建類Person,其中存儲(chǔ)的成員數(shù)據(jù)為:age(int),sex(boolean),weight(int),至少有一個(gè)構(gòu)造函數(shù)可以初始化這三個(gè)屬性值,同時(shí)提供獲取這三個(gè)屬性值的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.設(shè)計(jì)線程類WorkerThread,其構(gòu)造函數(shù)接受一個(gè)message字符串作為參數(shù),把該字符串打印到console上,同時(shí),在WorkThread的main函數(shù)中啟動(dòng)該線程。
解答:
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.寫(xiě)一個(gè)函數(shù)去掉一個(gè)字符串中單詞間多余的空格,使得相鄰兩個(gè)單詞間有且只有一個(gè)空格。例如當(dāng)輸入字符串是“Hello!_ _Game_programming_ _world!”時(shí),調(diào)用該函數(shù)后字符串變?yōu)椤癏ello!_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);
// 如果當(dāng)前字符是空格
if (c == ‘ ‘) {
// 判斷前一個(gè)不是是空格則添加,否則不添加
if (before.charAt(i – 1) != ‘ ‘) {
temp += c;
}
} else {
temp += c;
}
}
return temp;
}
22. 編寫(xiě)一個(gè)程序,用來(lái)計(jì)算1到100間所有整數(shù)的和是多少?
解答:
public static void GetSum()
{
int sum = 0;
for(int i=1;i<=100;i++)
{
sum+=i;
}
System.out.println(“和為:”+sum);
}
23.請(qǐng)簡(jiǎn)單寫(xiě)出用JAVA連接Oracle數(shù)據(jù)庫(kù),并執(zhí)行一條/SQL語(yǔ)句。(只需要寫(xiě)關(guān)鍵幾條語(yǔ)句即可,/SQL語(yǔ)句: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應(yīng)用開(kāi)發(fā)過(guò)程中經(jīng)常遇到輸出某種編碼的字符,如從GBK到iso8859-1等,如何輸出一個(gè)某種編碼的字符串?
public static String translate(String str) {
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. 請(qǐng)寫(xiě)出一個(gè)公用方法,輸入String返回該串是否含有非空字符,并寫(xiě)出junit的測(cè)試用例
答:
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實(shí)現(xiàn)一種排序
答:用插入法進(jìn)行排序代碼如下
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<num ;i++ )
{
list.add(new Integer(Math.abs(rand.nextInt()) % mod + 1));
System.out.println(“l(fā)ist["+i+"]=”+list.get(i));
}
}
public void SortIt()
{
Integer tempInt;
int MaxSize=1;
for(int i=1;i<list.size();i++)
{
tempInt = (Integer)list.remove(i);
if(tempInt.intValue()>=((Integer)list.get(MaxSize-1)).intValue())
{
list.add(MaxSize,tempInt);
MaxSize++;
System.out.println(list.toString());
}
else
{
for (int j=0;j<MaxSize ;j++ )
{
if (((Integer)list.get(j)).intValue()>=tempInt.intValue())
{
list.add(j,tempInt);
MaxSize++;
System.out.println(list.toString());
break;
}
}
}
}
System.out.println(“The ArrayList Sort After:”);
for(int i=0;i<list.size();i++)
{
System.out.println(“l(fā)ist["+i+"]=”+list.get(i));
}
}
public static void main(String[] args)
{
InsertSort sort = new InsertSort(10,100);
sort.SortIt();
}
}
27. 編寫(xiě)一個(gè)截取字符串的函數(shù),輸入為一個(gè)字符串和字節(jié)數(shù),輸出為按字節(jié)截取的字符串。 但是要保證漢字不被截半個(gè),如”我ABC”4,應(yīng)該截為”我AB”,輸入”我ABC漢DEF”,6,應(yīng)該輸出為”我ABC”而不是”我ABC+漢的半個(gè)”。
答:
package com.tarena;
public class SplitString {
String SplitStr;
int SplitByte;
public SplitString(String str, int bytes) {
SplitStr = str;
SplitByte = bytes;
System.out.println(“The String is:” + SplitStr + “;SplitBytes=”
+ SplitByte);
}
public void SplitIt()
{
int loopCount;
loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/SplitByte+1);
System.out.println(“Will Split into “+loopCount);
for (int i=1;i<=loopCount ;i++ )
{
if (i==loopCount){
System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length()));
} else {
System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte)));
}
}
} public static void main(String[] args) {
SplitString ss = new SplitString(
“test中dd文dsaf中男大3443n中國(guó)43中國(guó)人0ewldfls=103″, 4);
ss.SplitIt();
}
}
28. 編寫(xiě)程序?qū)⒂蓴?shù)字及字符組成的字符串中的數(shù)字截取出來(lái)并按順序輸出,例如:“ABC137GMNQQ2049PN5FFF”輸出結(jié)果應(yīng)該為01234579
答:
package com.tarena;
import java.util.Arrays;
public class NumberSplitChar {
public static void main(String[] args) {
String str=”ABC137GMNQQ2049PN5FFF”;
char[] beforechars=str.toCharArray();
char[] afterchars=new char[beforechars.length];
int j=0;
for(int i=0;i<beforechars.length;i++){
if(beforechars[i]>=’0′ && beforechars[i]<=’9′){
afterchars[j++]=beforechars[i];
}
}
Arrays.sort(afterchars);
for(int i=(afterchars.length-j);i<afterchars.length;i++){
System.out.print(afterchars[i]);
}
}
}
29. 請(qǐng)用JAVA實(shí)現(xiàn)兩個(gè)類,分別實(shí)現(xiàn)堆棧(Stack)和隊(duì)列(Queue)操作。
答:public class MyStack {
private List list;
public MyStack(){
list = new ArrayList();
}
public boolean isEmpty(){
return list.size() == 0;
}
public void push(Object obj){
list.add(obj);
}
public Object pop(){
if(list.size()>0){
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;// 用來(lái)當(dāng)隊(duì)列
public int tail;// 隊(duì)尾
public int size;// 隊(duì)的長(zhǎng)度,也可以設(shè)置一個(gè)默認(rèn)值,溢出時(shí)從新申請(qǐng)
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(“隊(duì)列為空!”);
throw new RuntimeException();
}
}
}
30. 假定屏幕的像素寬度為screenWidth,寫(xiě)一個(gè)函數(shù)計(jì)算一個(gè)字符串需要分成幾行顯示。
要求:
1)、每行應(yīng)盡可能多地顯示字符,但不能有字符部分或完全顯示在屏幕外。超過(guò)部分的字符換下一行顯示。
2)、每個(gè)字符的像素寬度不一樣,每個(gè)字符的像素寬度不一樣。用int GetCharWidth(char c)獲得每個(gè)字符的像素寬度。
/**
* 計(jì)算一個(gè)字符串可以分多少行進(jìn)行顯示
*
* @param s
* 原始字符串
* @param screenWidth
* 屏幕寬度
* @return 行數(shù)
*/
int calcLineNum(String s, int screenWidth) {
int length = 0;
// 行數(shù)
int n = 0;
// 統(tǒng)計(jì)長(zhǎng)度
for (int i = 0; i < s.length(); i++) {
// 當(dāng)前字符的寬度
int charLen = GetCharWidth(s.charAt(i));
// 總長(zhǎng)度增加
length += charLen;
// 如果達(dá)到屏幕寬度
if (length > screenWidth) {
n++; // 行數(shù)+1
length = charLen; // 重新計(jì)算長(zhǎng)度
}
}
// 最后一行處理
if (length > 0) {
n++;
}
return n;
}
總結(jié)
以上是生活随笔為你收集整理的Java笔试题库之编程题库 总共30道编程题,掌握了就可以应付中级以内Java面试题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Enumeration和Iterator
- 下一篇: 这样的递归调用,你看出来了?