package com.a0719;
import java.util.Random;
import java.util.Vector;public class Sort2 {
public static void main(String[] args){
Vector v =new Vector();
 Random a=new  Random();
 //先加入一个随机数k
 int k=a.nextInt(15);
v.add(k);
 for(int j=1;j<10;j++){
 boolean c=true;
while(c){ int w=a.nextInt(15);
 boolean b=true;
 //用h和vector中其他元素比较,如果都不同,输出false
 while(b){
int h=w;
//如果h与其后一个元素相等,直接退出循环,进入外层的循环;
if(h==(int)((Integer)v.get(j-1))){
b=false;
}
if(h!=(int)((Integer)v.get(j-1)))
j=j-1;//如果h不等于其后的一个元素,将下标后移一位继续循环
  //如果下标等于0退出循环

  if(j==0)
  b=false;
  }
if(j==0)
 v.add(w);
 c=false;}  
 }for(int j=0;j<10;j++){
 System.out.print(v.get(j)+" ");}
 }
}
// 这是一个从0到15中抽取10个不能重复的随机数!知道有一个contains方法可用!但是我这个代码问题出在哪呢?谢谢各位大哥了!算法很垃圾我知道,但是应该可以运行把!但是我运行不了!

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【haowxh】截止到2008-07-22 11:17:52的历史汇总数据(不包括此帖):
    发帖的总数量:1                        发帖的总分数:0                        每贴平均分数:0                        
    回帖的总数量:2                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:0                        结贴的总分数:0                        
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:1                        未结的总分数:0                        
    结贴的百分比:0.00  %               结分的百分比:---------------------
    无满意结贴率:---------------------无满意结分率:---------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    0
    0
    1
    0
    0
    0
    0
    0
    0
    0
    0
    1
    0
    0
    0
    1
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0这个就是你的变量j的变化过程。
    可以看出它根本没有来得及接近10,就不停在循环中循环,所以你根本没办法停止你的for循环。
    而且,对于工程来讲,把循环变量放在循环体中进行变化是for循环非常忌讳的。
      

  3.   

    如果你用j控制生成数字的个数,那中间要新开一个变量遍历vector
    否则遍历结束之后,j变为0,然后在for那里j++,变为1,
    然后遍历从1-〉0,如此反复,不会退出循环,而且生成的数字也不对
      

  4.   

    楼上的正解
    if(h==(int)((Integer)v.get(j-1))){ 
    b=false; 

    if(h!=(int)((Integer)v.get(j-1))) 
    j=j-1;//如果h不等于其后的一个元素,将下标后移一位继续循环 
      //如果下标等于0退出循环   if(j==0) 
      b=false; 
      } 
    if(j==0) 
    这些j都用int k=j 代替
      

  5.   

    帮你改了点可以跑了。
    import java.util.Random;
    import java.util.Vector;public class Sort2 {
    public static void main(String[] args) {
    Vector v = new Vector();
    Random a = new Random();
    // 先加入一个随机数k
    int k = a.nextInt(15);
    v.add(k);
    for (int j = 1; j < 10; j++) {
    boolean c = true;
    while (c) {
    int w = a.nextInt(15);
    boolean b = true;
    // 用h和vector中其他元素比较,如果都不同,输出false
    int i = j;
    while (b) {
    int h = w;
    // 如果h与其后一个元素相等,直接退出循环,进入外层的循环;
    if (h == (int) ((Integer) v.get(i-1))) {
    b = false;
    }
    if (h != (int) ((Integer) v.get(i-1)))
    i = i - 1;// 如果h不等于其后的一个元素,将下标后移一位继续循环
    // 如果下标等于0退出循环 if (i == 0)
    break;
    }
    if (j == 0)
    v.add(w);
    else if (b) {
    v.add(w);
    } else {
    j--;
    }
    c = false;
    }
    }
    for (int j = 0; j < 10; j++) {
    System.out.print(v.get(j) + " ");
    }
    }
    }
      

  6.   


    import java.util.Random;
    import java.util.Vector;public class Sort2 {
    public static void main(String[] args) {
    Vector v = new Vector();
    Random a = new Random();
    // 先加入一个随机数k
    int k = a.nextInt(15);
    v.add(k);
    for (int j = 1; j < 10; j++) {
    boolean c = true;
    while (c) {
    int w = a.nextInt(15);
    boolean b = true;
    // 用h和vector中其他元素比较,如果都不同,输出false
    int i = j;
    while (b) {
    int h = w;
    // 如果h与其后一个元素相等,直接退出循环,进入外层的循环;
    if (h == (int) ((Integer) v.get(i-1))) {
    b = false;
    }
    if (h != (int) ((Integer) v.get(i-1)))
    i = i - 1;// 如果h不等于其后的一个元素,将下标后移一位继续循环
    // 如果下标等于0退出循环 if (i == 0)
    break;
    }
    if (j == 0)
    v.add(w);
    else if (b) {
    v.add(w);
    } else {
    j--;
    }
    c = false;
    }
    }
    for (int j = 0; j < 10; j++) {
    System.out.print(v.get(j) + " ");
    }
    }
    }
      

  7.   

    //在1~29中随机选7个不周的数字
    import java.util.Random;
    public class randomNumber { /**
     * @param args
     */
    public static void main(String[] args){
    // TODO Auto-generated method stub
    int num=29;//29个数,可以更改 
    int choice=7;//选7个数,也可以改 
    int []a=new int[choice];//存放所选的7个数
    int []b=new int[num];
    int pos=0;
    int n;
    //产生0~29之间的数,作为要选择的随即数的下标
    Random ran=new Random();
    //初始化那29个数,这里用1~29 
    for (int i = 0; i < b.length; i++) {
    b[i]=i+1;
    }
    while(pos<choice){
    //产生随即数,作为从29个数中要选的数的下标
    n=ran.nextInt(num);
    if(n>=num)
    n=n+1;
    a[pos]=b[n];
    num--;
    //将所选的数与最 后一个数交换,这样所选过的数将不会再次被选上
    b[n]=b[num];
    pos++;

    }
    for(int i=0;i<a.length;i++){
    System.out.print(" "+a[i]);
    } }}
      

  8.   


    //在1~29中随机选7个不周的数字
    import java.util.Random;
    public class randomNumber { /**
     * @param args
     */
    public static void main(String[] args){
    // TODO Auto-generated method stub
    int num=29;//29个数,可以更改 
    int choice=7;//选7个数,也可以改 
    int []a=new int[choice];//存放所选的7个数
    int []b=new int[num];
    int pos=0;
    int n;
    //产生0~29之间的数,作为要选择的随即数的下标
    Random ran=new Random();
    //初始化那29个数,这里用1~29 
    for (int i = 0; i < b.length; i++) {
    b[i]=i+1;
    }
    while(pos<choice){
    //产生随即数,作为从29个数中要选的数的下标
    n=ran.nextInt(num);
    if(n>=num)
    n=n+1;
    a[pos]=b[n];
    num--;
    //将所选的数与最 后一个数交换,这样所选过的数将不会再次被选上
    b[n]=b[num];
    pos++;

    }
    for(int i=0;i<a.length;i++){
    System.out.print(" "+a[i]);
    } }}
      

  9.   

    这是我后来编的代码!看看如何呀!这个成功运行!呵呵
    import java.util.Random;
    import java.util.Vector;
    public class Sort2 {
    public static void main(String[] args){
    Vector v =new Vector();
     Random a=new  Random();
      for(int j=0;j<10;j++){
    while(true){
    int h=a.nextInt(15);
     int k=0;
     for(int i=0;i<j;i++){
    if(h==(int)((Integer)v.get(i))){
    k++;
    break;
    }}
    if(k==0)
    {  v.add(h);
      break;}}
     System.out.print(v.get(j)+"  ");
     }
     }
    }