想必这个问题有点郁闷 可是没有办法 客户要求有2组 号码 每组3个数字组成(我把这三个数字搞成了STRING类型的) 问题是现在要求 我能预先知道生成的随机数是什么 但是问题来了 我开始使用字符替换 但是循环上几遍总会变回来的 例如以前的是1,2,3 中间来回换一下  连续循环上几次 肯定又要回到123这里 比较就是1-9的来回换希望能变的让人看不出规律 只有我知道下一次的号码是什么 也就是说这个规律只有我知道 而且很高明 实在没辙了 来这里看看有没有神人

解决方案 »

  1.   

    import java.util.*;public class MyRandom{
    public static void main(String[] args){
    MyRandom mr=new MyRandom();
    for(int i=0;i<10;i++){
    System.out.println(mr.nextInt(i));
    } }
    private int nextInt(int index){
    if(index<0){
    throw new IllegalArgumentException("num must be positive number."); 
    }
    double x=Math.abs(Math.cos(Math.sqrt(2)*(index+1)));
    double y=1.0*137/13/(index+1);
    double z=17*index*index+29*index+67;
    y=y-(int)y;
    while(y*10<1) y*=10;
    while(z>1) z/=7;
    x=x*z+y;
    String str=String.valueOf(x);
    str=str.substring(2);
    int start=index%13;
    return Integer.parseInt(str.substring(start,start+3));

    }
    }F:\java>java  MyRandom
    568
    826
    752
    765
    588
    246
    292
    610
    521
    705不看算法,谁也不知道这些数是怎么来的,你只要知道序号,你就可以通过nextInt(序号),得出序号对应的数.
      

  2.   

    前1000个数是
    F:\java>java  MyRandom
    568 826 752 765 588 246 292 610 521 705 39 976 496 867 638 572 990 579 484 100 561 851 871 188 255 7
    0 38 302 629 766 563 537 774 943 170 126 441 740 9 493 899 366 671 189 671 100 622 198 70 73 27 474
    563 325 766 721 448 536 905 563 969 514 978 190 239 544 230 197 706 834 386 298 670 783 184 691 185
    328 308 528 26 123 643 456 688 187 703 151 172 412 777 160 755 203 356 747 628 777 887 262 190 656 6
    32 61 252 398 897 150 518 387 385 528 714 812 955 791 41 160 481 426 140 766 585 523 575 710 973 517
     994 786 156 866 726 488 128 202 59 603 970 235 59 930 918 94 102 503 804 832 339 288 218 615 155 83
    0 618 114 936 422 464 531 974 25 532 629 548 336 296 713 589 670 173 92 768 676 315 151 548 578 774
    817 306 960 832 723 57 176 428 503 426 726 682 158 513 266 274 130 660 258 240 83 74 820 657 163 985
     163 151 639 374 965 601 176 174 54 311 97 978 588 199 812 381 616 242 893 388 66 172 145 528 709 46
    7 180 549 139 576 670 656 278 616 749 146 568 27 429 463 862 811 501 987 434 339 276 418 635 929 674
     935 969 464 676 409 10 876 640 848 32 868 427 309 715 368 28 292 489 607 364 730 622 858 931 127 84
    0 858 241 293 494 565 737 967 972 25 445 486 639 619 595 526 481 47 613 521 404 66 80 196 659 750 68
    3 237 966 235 436 611 677 96 543 714 75 663 50 997 46 580 946 269 545 761 686 992 225 399 518 991 84
    6 62 459 957 597 419 457 327 195 553 455 259 593 974 286 848 91 359 350 497 911 437 24 309 826 154 3
    03 533 134 541 585 511 738 223 635 893 730 460 890 144 223 286 871 755 647 213 527 382 534 99 981 54
    2 376 12 188 775 378 719 227 606 231 623 116 200 489 863 996 36 549 318 698 267 803 495 97 713 727 5
    83 141 55 574 148 824 574 984 631 474 210 569 619 174 874 327 649 675 731 360 910 858 888 449 667 29
    2 178 457 91 229 715 17 381 706 893 667 498 910 601 857 966 9 874 966 103 633 263 977 860 837 148 62
    0 868 931 110 166 181 952 824 748 560 505 503 873 999 647 822 231 237 422 628 901 757 685 336 92 994
     53 414 557 814 622 429 20 832 773 107 273 589 680 962 384 422 784 216 12 883 615 73 881 221 751 872
     317 843 56 381 936 892 69 283 37 64 207 728 671 46 536 960 320 964 689 567 495 292 651 119 727 148
    549 676 273 170 636 10 833 842 821 948 236 48 733 143 697 362 663 684 209 205 76 4 787 1 878 824 936
     12 879 244 990 825 535 134 103 862 646 41 251 727 860 564 791 252 66 538 294 844 218 473 738 814 71
    2 188 448 531 623 450 252 242 205 680 639 156 270 50 756 164 242 514 4 789 173 279 206 634 381 710 8
    63 650 879 397 198 329 797 243 15 543 136 55 245 334 80 477 385 401 878 656 303 434 849 212 50 370 5
    31 121 157 648 497 603 748 337 633 901 942 757 473 767 700 880 490 91 107 509 336 403 116 162 879 24
     681 845 795 987 639 897 161 295 94 733 683 595 549 361 171 625 784 206 623 57 220 500 827 676 809 4
    37 519 717 575 163 923 122 257 175 503 770 481 692 608 888 531 610 13 442 8 658 266 63 681 666 481 4
    27 243 516 256 59 474 294 353 338 239 442 143 342 369 162 147 130 845 942 605 983 373 655 699 741 40
    7 24 244 730 718 197 240 639 856 359 686 9 517 657 285 691 282 950 520 576 19 34 296 507 7 649 183 6
    90 539 720 5 385 872 122 15 193 915 578 919 928 130 421 324 881 917 221 615 926 194 786 117 208 173
    98 181 108 49 172 970 278 887 306 108 392 327 961 606 430 702 146 983 334 966 464 388 988 149 813 61
     213 263 716 678 18 806 468 230 418 885 990 111 311 665 280 242 321 424 904 788 805 385 140 746 217
    995 386 813 162 241 22 639 998 870 293 60 588 140 219 219 155 420 277 159 79 467 448 158 414 261 252
     818 254 253 373 408 326 110 327 435 230 87 165 342 690 361 882 392 826 83 152 987 169 363 104 467 9
    22 33 383 493 356 33 845 311 105 513 450 640 642 271 527 205 424 394 662 591 507 664 803 468 292 372
     507 12 532 797 736 956 906 585 897 534 410 757 908 380 216 649 840 928 669 706 681 918 895 283 729
    107 70 761 467 653 426 227 255 66 294 219 112 963 732 802 64 355 396 996 811 898 164 323 886 285 364
     837 838 979 357 453 163 64 975 643 101 907 434 14 691 915 25 121 465 195 99 78 781 602
      

  3.   


    代码只是提供一个思路,cos,sqrt等,都是随意组合的,你自己组合一个,别人一般情况下是猜不出来的.
      

  4.   


    随机数是一个很难的问题,通常只能得到伪随机数
    java中的类库,得到的都是伪随机数
      

  5.   

    return Integer.parseInt(str.substring(start,start+3));这一句改为
    return str.substring(start,start+3);返回值类型改为String.结果就是三个字符长度的字符串了.
      

  6.   


    非也,我的代码是乱输的,你像什么cos,sqrt等,随便用,保出使结果无规律就可以了.没有什么高深的东西.
      

  7.   


    import java.util.*;public class MyRandom 
    {
    public static void main(String[] args) 
    {
    int i[] = new int[1000];
    Random random = new Random(47);
    for (int j = 0;j<1000 ;j++ )
    {
    i[j] = random.nextInt(1000);
    if(i[j]>99 & i[j]<1000)
    {
    System.out.print(i[j]+" ");
    }
    }
    }
    }用47作为Random类的种子,每次可以产生相同的随机数,楼主可以试验一下,nextInt(1000)产生1000以下的整形数
    产生的随机数是int型,不是你说的String型
    不知道满足楼主的要求么?
      

  8.   

    规范一下import java.util.*;public class MyRandom
    {
    public static void main(String[] args)
    {
    int i[] = new int[1000];
    Random random = new Random(47);
    for (int j = 0;j <1000 ;j++ )
    {
    i[j] = random.nextInt(1000);
    if(i[j]>99 & i[j] <1000)
    {
    System.out.print(i[j]+" ");
    }
    }
    }
    }
      

  9.   

    z's core's for pamp's & fers', &soms for sovr, &'l nvr flur tops!