<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,  comments - 11,  trackbacks - 0
     

    下面以一個(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;
    //
    屬性的gettersetter方法
    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;
    //
    屬性的gettersetter方法
    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á)式:

    man.name

    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ù)模型(WebOGNLTapestryWebWork等)
    - 提供類似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使用例:
    1. package com.test.ognl; ??
    2. import java.util.HashMap; ??
    3. import java.util.List; ??
    4. import java.util.Map; ??
    5. ??
    6. import junit.framework.TestCase; ??
    7. import ognl.Ognl; ??
    8. import ognl.OgnlContext; ??
    9. ??
    10. public class OgnlTest extends TestCase { ??
    11. ????public void testGetValue() throws Exception { ??
    12. ???????? OgnlContext context = new OgnlContext(); ??
    13. ???????? Book book = new Book("book1"); ??
    14. ???????? context.put("book", book); ??
    15. ??
    16. ????????final String expression = "book.name"; ??
    17. ???????? Object parseExpression = Ognl.parseExpression(expression); ??
    18. ???????? assertEquals("book1", Ognl.getValue(parseExpression, context)); ??
    19. ???????? ??
    20. ???????? book.setName("book2"); ??
    21. ???????? assertEquals("book2", Ognl.getValue(parseExpression, context)); ??
    22. ???? } ??
    23. ???? ??
    24. ????public void testSetValue() throws Exception { ??
    25. ???????? OgnlContext context = new OgnlContext(); ??
    26. ???????? Book book = new Book("book1"); ??
    27. ???????? context.put("book", book); ??
    28. ??
    29. ????????final String expression = "book.name"; ??
    30. ???????? Object parseExpression = Ognl.parseExpression(expression); ??
    31. ???????? Ognl.setValue(parseExpression, context, "book2"); ??
    32. ???????? assertEquals("book2", book.getName()); ??
    33. ???? } ??
    34. ???? ??
    35. ????public void testCallStaticMethod() throws Exception { ??
    36. ???????? OgnlContext context = new OgnlContext(); ??
    37. ??
    38. ????????final String expression = "@com.test.ognl.Book@test()"; ??
    39. ???????? Object parseExpression = Ognl.parseExpression(expression); ??
    40. ???????? assertEquals("Hello World", Ognl.getValue(parseExpression, context)); ??
    41. ???? } ??
    42. ???? ??
    43. ????public void testArray() throws Exception { ??
    44. ???????? OgnlContext context = new OgnlContext(); ??
    45. ??
    46. ????????final String expression = "new int[]{1, 2, 3}"; ??
    47. ???????? Object parseExpression = Ognl.parseExpression(expression); ??
    48. ????????int[] ret = (int[]) Ognl.getValue(parseExpression, context); ??
    49. ??
    50. ???????? assertEquals(1, ret[0]); ??
    51. ???????? assertEquals(2, ret[1]); ??
    52. ???????? assertEquals(3, ret[2]); ??
    53. ???? } ??
    54. ??
    55. ????public void testList() throws Exception { ??
    56. ???????? OgnlContext context = new OgnlContext(); ??
    57. ??
    58. ????????final String expression = "{1, 2, 3}"; ??
    59. ???????? Object parseExpression = Ognl.parseExpression(expression); ??
    60. ???????? List ret = (List) Ognl.getValue(parseExpression, context); ??
    61. ??
    62. ???????? assertEquals(new Integer(1), ret.get(0)); ??
    63. ???????? assertEquals(new Integer(2), ret.get(1)); ??
    64. ???????? assertEquals(new Integer(3), ret.get(2)); ??
    65. ???? } ??
    66. ???? ??
    67. ????public void testMap() throws Exception { ??
    68. ???????? OgnlContext context = new OgnlContext(); ??
    69. ??
    70. ????????final String expression = "#{\"name\" : \"book1\", \"price\" : 10.2}"; ??
    71. ???????? Object parseExpression = Ognl.parseExpression(expression); ??
    72. ???????? Map value = (Map) Ognl.getValue(parseExpression, context); ??
    73. ???????? assertEquals("book1", value.get("name")); ??
    74. ???????? assertEquals(new Integer(10.2), value.get("price")); ??
    75. ???? } ??
    76. } ??
    77. ??
    78. class Book { ??
    79. ????private int name; ??
    80. ??
    81. ????public Book(String bookName) { ??
    82. ????????this.name = bookName; ??
    83. ???? } ??
    84. ????public int getName() { ??
    85. ????????return name; ??
    86. ???? } ??
    87. ??
    88. ????public void setName(int Name) { ??
    89. ????????this.name = name; ??
    90. ???? } ??
    91. ??
    92. ????// test static method ??
    93. ????public static String hello() { ??
    94. ????????return "Hello World"; ??
    95. ???? }??

    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;
    ?? }
    }

    題目: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 + " ");
    ?? }
    }
    }

    僅列出標(biāo)題
    共50頁: First 上一頁 8 9 10 11 12 13 14 15 16 下一頁 Last 
    主站蜘蛛池模板: 亚洲国产aⅴ综合网| 亚洲中文字幕无码不卡电影| 男女男精品网站免费观看| 国产精一品亚洲二区在线播放| 美女视频黄的全免费视频| 免费国产叼嘿视频大全网站 | 亚洲精品岛国片在线观看| 久久久www成人免费毛片| 你懂的免费在线观看网站| 无码人妻一区二区三区免费视频| 中文字幕亚洲精品无码| 婷婷亚洲久悠悠色悠在线播放| 成人亚洲综合天堂| 亚洲综合婷婷久久| 在线播放亚洲精品| 最近免费中文字幕大全免费| 无码人妻丰满熟妇区免费| 少妇性饥渴无码A区免费 | 特级毛片aaaa级毛片免费| 亚洲AV永久无码天堂影院| 国产成人精品日本亚洲18图| 久久久久亚洲Av无码专| 亚洲国产综合专区电影在线| 伊人婷婷综合缴情亚洲五月| 曰韩亚洲av人人夜夜澡人人爽| 亚洲日本一区二区三区在线不卡| 国产免费黄色大片| 久久精品国产亚洲AV香蕉| 亚洲蜜芽在线精品一区| 亚洲男人电影天堂| 精品一区二区三区免费视频| 国产精品成人免费观看| 中文字幕免费在线看线人动作大片 | 亚洲最新视频在线观看| 亚洲综合婷婷久久| 97在线免费视频| 亚洲精品国精品久久99热| 中文字幕亚洲不卡在线亚瑟| 亚洲永久无码3D动漫一区| 亚洲另类激情综合偷自拍| 亚洲一级毛片在线观|