下面以一個(gè)簡單的示例來幫助讀者理解OGNL表達(dá)式。使用OGNL表達(dá)式,需要在www.ognl.org網(wǎng)站下載一個(gè)ognl.jar插件包,將該文件復(fù)制到classpath路徑下即可。建立一個(gè)復(fù)合類型,如代碼8.1所示。
代碼8.1定義復(fù)合類型
package ch8; import java.util.Date; //團(tuán)隊(duì)類 public class Team { //團(tuán)隊(duì)名稱 private String teamname; //定義團(tuán)隊(duì)人員屬性 private Person person; //團(tuán)隊(duì)人數(shù) private int personnum; //屬性的getter和setter方法 public String getTeamname() { return teamname; } public void setTeamname(String teamname) { this.teamname = teamname; } public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; } public int getPersonnum() { return personnum; } public void setPersonnum(int personnum) { this.personnum = personnum; } } //定義人員類 class Person { //姓名 private String name; //年齡 private int age; //人員出生日期 private Date birthday; //屬性的getter和setter方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } } |
代碼8.1所示內(nèi)容定義了兩個(gè)復(fù)合類型:團(tuán)隊(duì)(team)和人員(person)類型。使用OGNL表達(dá)式示例,如代碼8.2所示。
代碼8.2使用OGNL表達(dá)式示例
package ch8; import java.util.HashMap; import java.util.Map; import ognl.Ognl; import ognl.OgnlException; public class TestOGNL { public static void main(String[] args) { //定義一個(gè)Map對象 Map m = new HashMap(); //定義一個(gè)Team對象 Team team1 = new Team(); team1.setTeamname("團(tuán)隊(duì)1"); //定義一個(gè)Person對象 Person person1 = new Person(); person1.setName("pla1"); //添加team元素 team1.setPerson(person1); //定義一個(gè)Team對象 Team team2 = new Team(); team2.setTeamname("團(tuán)隊(duì)2"); //定義一個(gè)Person對象 Person person2 = new Person(); person2.setName("pla2"); //添加team元素 team2.setPerson(person2);
//添加Map元素 m.put("team1", team1); m.put("team2", team2); try { System.out.println(Ognl.getValue("team1.teamname", m)); System.out.println(Ognl.getValue("team2.person.name", m)); System.out.println(Ognl.getValue("teamname", team2)); System.out.println(Ognl.getValue("person.name", team2)); } catch (OgnlException e) { } } } |
代碼8.2所示內(nèi)容定義了一個(gè)Map類型的嵌套屬性,如圖8.1所示。
??
|
圖8.1嵌套屬性示意圖 |
運(yùn)行該示例,控制器顯示如下信息:
團(tuán)隊(duì)1 pla2 團(tuán)隊(duì)2 pla2 |
★說明★
OGNL可以使用非常簡單的表達(dá)式來訪問多層嵌套屬性,為開發(fā)者提供了一個(gè)有力的工具。
posted @
2009-08-13 14:25 jadmin 閱讀(139) |
評論 (0) |
編輯 收藏
基本的OGNL語法是十分簡單的,當(dāng)然OGNL支持豐富的表達(dá)式,一般情況下,不用擔(dān)心OGNL的復(fù)雜性。例如有一個(gè)man對象,該對象有一個(gè)name屬性,那么使用OGNL來獲得該name屬性可以使用如下表達(dá)式:
OGNL表達(dá)式的基礎(chǔ)單元稱為導(dǎo)航鏈,簡稱為鏈。一個(gè)最簡單的鏈由如下部分組成。
>
屬性名稱:如上述示例中的name。
>
方法調(diào)用:hashCode()返回當(dāng)前對象的hash code。
>
數(shù)組元素:listeners[0]返回當(dāng)前對象的監(jiān)聽器列表中的第一個(gè)元素。
★說明★
OGNL表達(dá)式基于OGNL上下文中的當(dāng)前對象,一個(gè)“鏈”將使用上一個(gè)“鏈”的處理結(jié)果,開發(fā)者可以任意擴(kuò)展該鏈的長度,OGNL沒有限制。
例如,一個(gè)OGNL表達(dá)式如下:
name.toCharArray()[0].numericValue.toString() |
該表達(dá)式將按照如下步驟求值。
(1)獲得OGNL Context中初始對象或者是根對象(root對象)的name對象。
(2)調(diào)用toCharArray()方法,返回一個(gè)String類型對象。
(3)獲得該String對象的第一個(gè)字符。
(4)獲得該字符的numericValue屬性(該字符為一個(gè)Character對象,該對象有一個(gè)getNumericValue()方法,該方法返回一個(gè)Integer類型值)。
(5)將獲得的Integer對象轉(zhuǎn)換為一個(gè)String類型值(使用toString()方法)。
posted @
2009-08-13 13:55 jadmin 閱讀(83) |
評論 (0) |
編輯 收藏
OGNL是Object Graph Navigation Language的縮寫,與JSP,JSF相比,OGNL是一種功能非常強(qiáng)大的針對Java的表達(dá)式語言(EL),它可用來讀取和更新Java對象的屬性。
OGNL可以用在以下方面:
- 用做數(shù)據(jù)綁定語言用來綁定GUI元素(textfield, combobox等)到模型對象
- 用做數(shù)據(jù)源語言用來映射數(shù)據(jù)庫表到表模型對象
- 用做數(shù)據(jù)綁定語言用來綁定web組件到數(shù)據(jù)模型(
WebOGNL,
Tapestry,
WebWork等)
- 提供類似
Jakarta Commons BeanUtils所提供的功能(讀取Java對象的屬性)
OGNL表達(dá)式語法:
Java標(biāo)準(zhǔn)類型:bool類型:true,false
int類型:10, 0xABCD等
long類型:100L
float類型:1.0, 0.5F等
double類型:0.01D
char類型:'A', '\uFFFF'等
字符串類型:"Hello World!"
null
OGNL獨(dú)自類型:例:10.01B,相當(dāng)于java.math.BigDecimal
例:100000H,相當(dāng)于java.math.BigInteger
OGNL表達(dá)式中能使用的操作符號:OGNL表達(dá)式中能使用的操作符基本跟Java里的操作符一樣,除了能使用 +, -, *, /, ++, --, ==, !=, = 等操作符之外,還能使用 mod, in, not in等
變量的引用:使用方法:#變量名
例:#this, #user.name
對靜態(tài)方法或變量的訪問:@mypkg.MyClass@myVar
@mypkg.MyClass@myMethod()
讀取變量值:例:user.address.countryName
方法調(diào)用:例:user.getName()
對象的創(chuàng)建:new java.net.URL("http://localhost/")
List表達(dá)式例:{"green", "red", "blue"}
Map表達(dá)式例:#{"key1" : "value1", "key2" : "value2", "key3" : "value3"}
對map引用,例:map.key1
等等。
OGNL官方首頁:http://www.ognl.org/OGNL官方文檔 (2.6.9)OGNL Language Guide (2.6.9)附:
OGNL使用例:
- package com.test.ognl; ??
- import java.util.HashMap; ??
- import java.util.List; ??
- import java.util.Map; ??
- ??
- import junit.framework.TestCase; ??
- import ognl.Ognl; ??
- import ognl.OgnlContext; ??
- ??
- public class OgnlTest extends TestCase { ??
- ????public void testGetValue() throws Exception { ??
- ???????? OgnlContext context = new OgnlContext(); ??
- ???????? Book book = new Book("book1"); ??
- ???????? context.put("book", book); ??
- ??
- ????????final String expression = "book.name"; ??
- ???????? Object parseExpression = Ognl.parseExpression(expression); ??
- ???????? assertEquals("book1", Ognl.getValue(parseExpression, context)); ??
- ???????? ??
- ???????? book.setName("book2"); ??
- ???????? assertEquals("book2", Ognl.getValue(parseExpression, context)); ??
- ???? } ??
- ???? ??
- ????public void testSetValue() throws Exception { ??
- ???????? OgnlContext context = new OgnlContext(); ??
- ???????? Book book = new Book("book1"); ??
- ???????? context.put("book", book); ??
- ??
- ????????final String expression = "book.name"; ??
- ???????? Object parseExpression = Ognl.parseExpression(expression); ??
- ???????? Ognl.setValue(parseExpression, context, "book2"); ??
- ???????? assertEquals("book2", book.getName()); ??
- ???? } ??
- ???? ??
- ????public void testCallStaticMethod() throws Exception { ??
- ???????? OgnlContext context = new OgnlContext(); ??
- ??
- ????????final String expression = "@com.test.ognl.Book@test()"; ??
- ???????? Object parseExpression = Ognl.parseExpression(expression); ??
- ???????? assertEquals("Hello World", Ognl.getValue(parseExpression, context)); ??
- ???? } ??
- ???? ??
- ????public void testArray() throws Exception { ??
- ???????? OgnlContext context = new OgnlContext(); ??
- ??
- ????????final String expression = "new int[]{1, 2, 3}"; ??
- ???????? Object parseExpression = Ognl.parseExpression(expression); ??
- ????????int[] ret = (int[]) Ognl.getValue(parseExpression, context); ??
- ??
- ???????? assertEquals(1, ret[0]); ??
- ???????? assertEquals(2, ret[1]); ??
- ???????? assertEquals(3, ret[2]); ??
- ???? } ??
- ??
- ????public void testList() throws Exception { ??
- ???????? OgnlContext context = new OgnlContext(); ??
- ??
- ????????final String expression = "{1, 2, 3}"; ??
- ???????? Object parseExpression = Ognl.parseExpression(expression); ??
- ???????? List ret = (List) Ognl.getValue(parseExpression, context); ??
- ??
- ???????? assertEquals(new Integer(1), ret.get(0)); ??
- ???????? assertEquals(new Integer(2), ret.get(1)); ??
- ???????? assertEquals(new Integer(3), ret.get(2)); ??
- ???? } ??
- ???? ??
- ????public void testMap() throws Exception { ??
- ???????? OgnlContext context = new OgnlContext(); ??
- ??
- ????????final String expression = "#{\"name\" : \"book1\", \"price\" : 10.2}"; ??
- ???????? Object parseExpression = Ognl.parseExpression(expression); ??
- ???????? Map value = (Map) Ognl.getValue(parseExpression, context); ??
- ???????? assertEquals("book1", value.get("name")); ??
- ???????? assertEquals(new Integer(10.2), value.get("price")); ??
- ???? } ??
- } ??
- ??
- class Book { ??
- ????private int name; ??
- ??
- ????public Book(String bookName) { ??
- ????????this.name = bookName; ??
- ???? } ??
- ????public int getName() { ??
- ????????return name; ??
- ???? } ??
- ??
- ????public void setName(int Name) { ??
- ????????this.name = name; ??
- ???? } ??
- ??
- ??????
- ????public static String hello() { ??
- ????????return "Hello World"; ??
- ???? }??
posted @
2009-08-12 18:19 jadmin 閱讀(112) |
評論 (0) |
編輯 收藏
cellspacing ---> 單元格的元素與邊界的距離
cellpadding ---> 單元格與單元格之間的距離
posted @
2009-08-09 19:34 jadmin 閱讀(136) |
評論 (0) |
編輯 收藏
??? 缺省構(gòu)造函數(shù)的問題:base類是父類,derived類是子類,首先要說明的是由于先有父類后有子類,所以生成子類之前要首先有父類。class是由class的構(gòu)造函數(shù)constructor產(chǎn)生的,每一個(gè)class都有構(gòu)造函數(shù),如果你在編寫自己的class時(shí)沒有編寫任何構(gòu)造函數(shù),那么編譯器為你自動(dòng)產(chǎn)生一個(gè)缺省default構(gòu)造函數(shù)。這個(gè)default構(gòu)造函數(shù)實(shí)質(zhì)是空的,其中不包含任何代碼。但是一牽扯到繼承,它的問題就出現(xiàn)了。
??? 如果父類base class只有缺省構(gòu)造函數(shù),也就是編譯器自動(dòng)為你產(chǎn)生的。而子類中也只有缺省構(gòu)造函數(shù),那么不會產(chǎn)生任何問題,因?yàn)楫?dāng)你試圖產(chǎn)生一個(gè)子類的實(shí)例時(shí),首先要執(zhí)行子類的構(gòu)造函數(shù),但是由于子類繼承父類,所以子類的缺省構(gòu)造函數(shù)自動(dòng)調(diào)用父類的缺省構(gòu)造函數(shù)。先產(chǎn)生父類的實(shí)例,然后再產(chǎn)生子類的實(shí)例。如下:
class base{
}
class derived extends base{
public static void main(String[] args){
??? derived d=new derived();
}
}
下面我自己顯式地加上了缺省構(gòu)造函數(shù):
class base{
base(){
??? System.out.println("base constructor");
}
}
class derived extends base{
derived(){
??? System.out.println("derived constructor");
}
public static void main(String[] args){
??? derived d=new derived();
}
}
執(zhí)行結(jié)果如下:說明了先產(chǎn)生base class然后是derived class。
base constructor
derived constructor
我要說明的問題出在如果base class有多個(gè)constructor而derived class也有多個(gè)constructor,這時(shí)子類中的構(gòu)造函數(shù)缺省調(diào)用那個(gè)父類的構(gòu)造函數(shù)呢?答案是調(diào)用父類的缺省構(gòu)造函數(shù)。但是不是編譯器自動(dòng)為你生成的那個(gè)缺省構(gòu)造函數(shù)而是你自己顯式地寫出來的缺省構(gòu)造函數(shù)。
class base{
base(){
??? System.out.println("base constructor");
}
base(int i){
??? System.out.println("base constructor int i");
}
}
class derived extends base{
derived(){
??? System.out.println("derived constructor");
}
derived(int i){
??? System.out.println("derived constructor int i");
}
public static void main(String[] args){
??? derived d=new derived();
??? derived t=new derived(9);
}
}
D:\java\thinking\think6>java derived
base constructor
derived constructor
base constructor
derived constructor int i
如果將base 類的構(gòu)造函數(shù)注釋掉,則出錯(cuò)。
class base{
// base(){
//??? System.out.println("base constructor");
// }
base(int i){
??? System.out.println("base constructor int i");
}
}
class derived extends base{
derived(){
??? System.out.println("derived constructor");
}
derived(int i){
??? System.out.println("derived constructor int i");
}
public static void main(String[] args){
??? derived d=new derived();
??? derived t=new derived(9);
}
}
D:\java\thinking\think6>javac derived.java
derived.java:10: cannot resolve symbol
symbol : constructor base ()
location: class base
derived(){
?????????? ^
derived.java:13: cannot resolve symbol
symbol : constructor base ()
location: class base
derived(int i){
2 errors
說明子類中的構(gòu)造函數(shù)找不到顯式寫出的父類中的缺省構(gòu)造函數(shù),所以出錯(cuò)。
那么如果你不想子類的構(gòu)造函數(shù)調(diào)用你顯式寫出的父類中的缺省構(gòu)造函數(shù)怎么辦呢?如下例:
class base{
// base(){
//??? System.out.println("base constructor");
// }
base(int i){
??? System.out.println("base constructor int i");
}
}
class derived extends base{
derived(){
??? super(8);
??? System.out.println("derived constructor");
}
derived(int i){
??? super(i);
??? System.out.println("derived constructor int i");
}
public static void main(String[] args){
??? derived d=new derived();
??? derived t=new derived(9);
}
}
D:\java\thinking\think6>java derived
base constructor int i
derived constructor
base constructor int i
derived constructor int i
super(i)表示父類的構(gòu)造函數(shù)base(i)請大家注意:一個(gè)是super(i)一個(gè)是super(8)。大家想想是為什么??
結(jié)論:
子類如果有多個(gè)構(gòu)造函數(shù)的時(shí)候,父類要么沒有構(gòu)造函數(shù),讓編譯器自動(dòng)產(chǎn)生,那么在執(zhí)行子類構(gòu)造函數(shù)之前先執(zhí)行編譯器自動(dòng)產(chǎn)生的父類的缺省構(gòu)造函數(shù);要么至少要有一個(gè)顯式的缺省構(gòu)造函數(shù)可以讓子類的構(gòu)造函數(shù)調(diào)用。
posted @
2009-08-09 13:18 jadmin 閱讀(115) |
評論 (0) |
編輯 收藏
Win+R
cmd
sc delete 服務(wù)名
posted @
2009-08-09 12:29 jadmin 閱讀(102) |
評論 (0) |
編輯 收藏
????? java提供finalize()方法,垃圾回收器準(zhǔn)備釋放內(nèi)存的時(shí)候,會先調(diào)用finalize()。
????? (1).對象不一定會被回收。
????? (2).垃圾回收不是析構(gòu)函數(shù)。
????? (3).垃圾回收只與內(nèi)存有關(guān)。
????? (4).垃圾回收和finalize()都是靠不住的,只要JVM還沒有快到耗盡內(nèi)存的地步,它是不會浪費(fèi)時(shí)間進(jìn)行垃圾回收的。
???? 垃圾收集器在進(jìn)行垃圾收集的時(shí)候會自動(dòng)呼叫對象的finalize方法,用來進(jìn)行一些用戶自定義的非內(nèi)存清理工作,因?yàn)槔占鞑粫幚韮?nèi)存以外的東西。所以,有的時(shí)候用戶需要定義一些清理的方法,比如說處理文件和端口之類的非內(nèi)存資源。
????? finalize的工作原理應(yīng)該是這樣的:一旦垃圾收集器準(zhǔn)備好釋放對象占用的存儲空間,它首先調(diào)用finalize(),而且只有在下一次垃圾收集過程中,才會真正回收對象的內(nèi)存.所以如果使用finalize(),就可以在垃圾收集期間進(jìn)行一些重要的清除或清掃工作.
????? finalize()在什么時(shí)候被調(diào)用?
????? 有三種情況
????? 1.所有對象被Garbage Collection時(shí)自動(dòng)調(diào)用,比如運(yùn)行System.gc()的時(shí)候.
????? 2.程序退出時(shí)為每個(gè)對象調(diào)用一次finalize方法。
????? 3.顯式的調(diào)用finalize方法
????? 除此以外,正常情況下,當(dāng)某個(gè)對象被系統(tǒng)收集為無用信息的時(shí)候,finalize()將被自動(dòng)調(diào)用,但是jvm不保證finalize()一定被調(diào)用,也就是說,finalize()的調(diào)用是不確定的,這也就是為什么sun不提倡使用finalize()的原因。
????? 理解finalize( ) 正好在垃圾回收以前被調(diào)用非常重要。例如當(dāng)一個(gè)對象超出了它的作用域時(shí),finalize( ) 并不被調(diào)用。這意味著你不可能知道何時(shí)——甚至是否——finalize( ) 被調(diào)用。因此,你的程序應(yīng)該提供其他的方法來釋放由對象使用的系統(tǒng)資源,而不能依靠finalize( ) 來完成程序的正常操作。
posted @
2009-08-08 23:17 jadmin 閱讀(127) |
評論 (0) |
編輯 收藏
Java版二分查找算法
二分查找算法的目標(biāo)查找集合應(yīng)該為有序序列
/*
* @(#)BinarySearch.java 2009-8-8
*
* Copyright (c) 2009 by jadmin. All Rights Reserved.
*/
package algorithm.search;
/**
* 二分查找算法
*
* @author <a href="mailto:jadmin@126.com">jadmin</a>
* @version $Id: BinarySearch.java 2009-8-8 上午05:07:05$
* @see <a href=">
*/
public final class BinarySearch {
public static int find(int[] a, int key) {
?? return find(a, 0, a.length - 1, key);
}
// 非遞歸實(shí)現(xiàn)
public static int find(int[] a, int fromIndex, int toIndex, int key) {
?? int low = fromIndex;
?? int high = toIndex;
?? while (low <= high) {
??? // 無符號右移位邏輯運(yùn)算
??? int mid = (low + high) >>> 1;
??? int midVal = a[mid];
??? if (midVal < key)
???? low = mid + 1;
??? else if (midVal > key)
???? high = mid - 1;
??? else
???? return mid; // key found
?? }
?? return -(low + 1); // key not found.
}
// 遞歸實(shí)現(xiàn)
public static int search(int[] a, int fromIndex, int toIndex, int key) {
?? if(fromIndex > toIndex) {
??? return -1;
?? }
?? int mid = (fromIndex + toIndex) >>> 1;
?? if(a[mid] < key) {
??? return search(a, mid + 1, toIndex, key);
?? } else if(a[mid] > key) {
??? return search(a, fromIndex, mid - 1, key);
?? } else {
??? return mid;
?? }
}
posted @
2009-08-08 05:10 jadmin 閱讀(99) |
評論 (0) |
編輯 收藏
題目:1 ~ 1000放在含有1001個(gè)元素的數(shù)組中,只有唯一的一個(gè)元素值重復(fù),其它均只出現(xiàn)一次。每個(gè)數(shù)組元素只能訪問一次,設(shè)計(jì)一個(gè)算法,將它找出來,不用輔助存儲空間,能否設(shè)計(jì)一個(gè)算法實(shí)現(xiàn)?
姑且令該數(shù)組為int[] a
解法1:數(shù)組累和 - (1+2+3+...+.. + 999 + 1000)= 所求結(jié)果
public int find(int[] a) {
??? int t = 1000 * (1000 + 1) / 2; // 1 ~ 1000的累和
??? int sum = 0;
??? for(int i = 0;i < a.length;i++) {
??????? sum += a[i];
??? }
??? return (sum - t);
}
解法2:異或
將所有的數(shù)全部異或,得到的結(jié)果與1^2^3^...^1000的結(jié)果進(jìn)行異或,得到的結(jié)果就是重復(fù)數(shù)。
但是這個(gè)算法雖然很簡單,但證明起來并不是一件容易的事情。這與異或運(yùn)算的幾個(gè)特性有關(guān)系。
首先是異或運(yùn)算滿足交換律、結(jié)合律。
所以,1^2^...^n^...^n^...^1000,無論這兩個(gè)n出現(xiàn)在什么位置,都可以轉(zhuǎn)換成為1^2^...^1000^(n^n)的形式。
其次,對于任何數(shù)x,都有x^x=0,x^0=x。
所以1^2^...^n^...^n^...^1000 = 1^2^...^1000^(n^n)= 1^2^...^1000^0 = 1^2^...^1000(即序列中除了n的所有數(shù)的異或)。
令,1^2^...^1000(序列中不包含n)的結(jié)果為T
則1^2^...^1000(序列中包含n)的結(jié)果就是T^n。
T^(T^n)=n。
所以,將所有的數(shù)全部異或,得到的結(jié)果與1^2^3^...^1000的結(jié)果進(jìn)行異或,得到的結(jié)果就是重復(fù)數(shù)。
public int find(int[] a) {
??? int t1 = 0;
??? int t2 = 0;
??? for(int i = 0;i < a.length;i++) {
??????? t1 ^= a[i];
??? }
??? for(int i = 1;i <= 1000;i++) {
??????? t2 ^= i;
??? }
??? return (t1 ^ t2);
}
遺留問題:如果放入數(shù)組a中的數(shù)為:1000個(gè)不連續(xù)且互不相同的數(shù)(設(shè)其組成的數(shù)組為n) + 重復(fù)數(shù)(取自數(shù)組n),又如何求取這個(gè)重復(fù)數(shù)呢,要保證算法的效率哦
參考:
http://www.cnblogs.com/myqiao/archive/2009/07/21/1528156.html
http://www.cnblogs.com/myqiao/archive/2009/07/22/1528271.html
posted @
2009-08-08 03:57 jadmin 閱讀(104) |
評論 (0) |
編輯 收藏
/*
* @(#)RandNumberUtil.java 2009-8-8
*
* Copyright (c) 2009 by jadmin. All Rights Reserved.
*/
package com.jsoft.util.random;
/**
* 隨機(jī)數(shù)輔助類
*
* @author <a href="mailto:jadmin@126.com">jadmin</a>
* @version $Id: RandNumberUtil.java 2009-8-8 上午03:22:37$
* @see <a href=">
*/
public class RandNumberUtil {
/**
* 隨機(jī)生成count個(gè)不重復(fù)的并且介于min和max間的整數(shù)
*
* @param min
* @param max
* @param count
* @return
*/
public static int[] generate(int min, int max, int count) {
?? if(min > max) {
??? throw new IllegalArgumentException("參數(shù)min必須小于max...");
?? }
?? int n = max - min + 1;
?? if(count > n) {
??? throw new IllegalArgumentException("參數(shù)count超出范圍...");
?? }
?? int[] span = new int[n];
?? for (int i = 0, j = min; i < n; i++, j++) {
??? span[i] = j;
?? }
??
?? // 存儲要生成的隨機(jī)數(shù)
?? int[] target = new int[count];
?? for (int i = 0; i < target.length; i++) {
??? int r = (int)(Math.random() * n);
??? target[i] = span[r];
??? span[r] = span[n - 1];
??? n--;
?? }
?? return target;
}
public static void main(String[] args) {
?? int[] a = generate(12, 68, 9);
?? for(int i : a) {
??? System.out.print(i + " ");
?? }
}
}
posted @
2009-08-08 03:29 jadmin 閱讀(122) |
評論 (0) |
編輯 收藏