Java程序没有语法错误,给的数值一旦较大,便运行不出结果;


import java.util.*;
public class t发牌器 {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        Card bt=new Card("黑桃");
        System.out.println("how many cards you want?(<13)");
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        bt.distribute(n);
        
    }

}
class Card{
    String number[]= {"null","A","J","Q","K","2","3","4","5","6","7","8"
            ,"9","10"};//number[0]为空;
    String c;
    public Card(String c) {//构造函数,定义牌的种类
        this.c=c;
    }
    public void distribute(int n) {
        Random rand=new Random();
        int index[]=new int[n];//用于存入number数组的下标,默认值为0
        int count=0;//index数组的下标
        int flag=1;//判断是否重复,重复为0
        while(true){
            int r=rand.nextInt(13)+1;//获得1-14间的随机整数
            for(int i=0;i<n;i++){//该循环判断是否重复,重复则跳出循环并执行下面的代码
                if(r==index[i]) {
                    flag=0;break;
                }
            }
            if(flag==1) {
                index[count]=r;//将随机数覆盖index数组
                count++;
            }
            if(index[n-1]!=0) {//index最后一个被覆盖时,结束循环
                break;
            }
        }
        for(int i=0;i<n;i++) {
            System.out.print(c+number[index[i]]+" ");
        }
    }
}

给定的n比较大时,程序便一直处于运行中,不出结果;
希望能在原来的基础上改良代码;

判断重复应该循环conut次,修改一下

for(int i=0;i<n;i++){
改为
for(int i=0;i<count;i++){

看看可以不


import java.util.*;
public class t发牌器 
{
    public static void main(String[] args) 
    {
        // TODO 自动生成的方法存根
        Card bt=new Card("黑桃");
        System.out.println("how many cards you want?(<13)");
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        bt.distribute(n);
    }
}
class Card 
{
    String number[]= {"null","A","J","Q","K","2","3","4","5","6","7","8","9","10"};//number[0]为空;
    String c;
    public Card(String c) 
    {//构造函数,定义牌的种类
        this.c=c;
    }
    public void distribute(int n) 
    {
        Random rand=new Random();
        int index[]=new int[n];//用于存入number数组的下标,默认值为0
        int count=0;//index数组的下标
        int flag=1;//判断是否重复,重复为0

        for(int i=0; i<n; i++) 
        { //该循环判断是否重复,重复则跳出循环并执行下面的代码
            index[i]=rand.nextInt(13)+1;
        }
        for(int i=0; i<n; i++)
        {
            System.out.print(c+number[index[i]]+" ");
        }
    }
}



import java.util.*;
public class t发牌器 {
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        Card bt=new Card("黑桃");
        System.out.println("how many cards you want?(<13)");
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        bt.distribute(n);
    }
}
class Card {
    String number[]= {"null","A","J","Q","K","2","3","4","5","6","7","8","9","10"};//number[0]为空;
    String c;
    public Card(String c) {
        //构造函数,定义牌的种类
        this.c=c;
    }
    public void distribute(int n) {
        Random rand=new Random();
        int index[]=new int[n];//用于存入number数组的下标,默认值为0
        
        int count=0;//index数组的下标
        int flag=1;//判断是否重复,重复为0
        for(int i=0; i<n; i++) {
            count=0;
            index[i]=rand.nextInt(13)+1;

            for(int j=0; j<n; j++) {
                if(index[i]==index[j]) {
                    count ++;

                    if(count>1) {
                        i--;
                    }

                }
            }

        }
        for(int i=0; i<n; i++) {
            System.out.print(index[i]+"  ");
        }
        for(int i=0; i<n; i++) {
            System.out.print(c+number[index[i]]+" ");
        }
    }
}