现在有100个球, 要求随机的放到10个盒子里. 每个盒子里球个数要相等.怎么实现? 多谢

解决方案 »

  1.   


    import java.util.Iterator;
    import java.util.LinkedHashSet;
    import java.util.Random;
    import java.util.Set;
    public class Main {
    public static void main(String[] args) {
    int[] ball = new int[100];

    //初始化,给每个球一个编号,从1到100
    for(int i=0; i<ball.length; i++) {
    ball[i] = i + 1;
    }

    //随机生成一个1-100的顺序,结果存放在set中,防止重复
    Set<Integer> set = new LinkedHashSet<Integer>();
    Random rand = new Random();
    int num;
    while(set.size() < 100) {
    num = rand.nextInt(100);
    set.add(num + 1);
    }

    //模拟10个盒子,每个盒子装10个球,从set中按顺序取,10个10个放入盒子中
    int[][] box = new int[10][10];
    Iterator<Integer> iterator = set.iterator();
    for(int i=0; i<box.length; i++) {
    for(int j=0; j<box[i].length; j++) {
    box[i][j] = iterator.next();
    }
    }

    //打印出每个盒子中球的编号
    for(int i=0; i<box.length; i++) {
    System.out.print("第" + (i+1) + "盒子中的球:");
    StringBuffer sb = new StringBuffer();
    for(int j=0; j<box[i].length; j++) {
    sb.append(box[i][j] + ",");
    }
    System.out.println(sb.substring(0, sb.length() - 1));
    }
    }
    }上面简单实现了一个,楼主可以看看!
      

  2.   

    public static void main(String[] args) {
    Set<Integer> box = new LinkedHashSet<Integer>();
    Random random = new Random();
    while (box.size() < 100) {
    box.add(random.nextInt(100));
    }
    Iterator<Integer> iterator = box.iterator();
    int y = 1;
    while (iterator.hasNext()) {
    if (y % 10 == 1) {
    System.out.println();
    System.out.print("第" + (y / 10 + 1) + "个盒子里放的球:");
    }
    System.out.print(iterator.next() + " ,");
    y++;
    }
    }
      

  3.   


    package com;import java.util.ArrayList;
    import java.util.List;
    public class Test { /**
     * @param args
     */
    static List a = new ArrayList<Integer>();
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    List list=new ArrayList<Integer>();

    for(int i=1;i<=100;i++){
    list.add(i);
    }
    java.util.Collections.shuffle(list);
    for(int i=0;i<10;i++){
    a=list.subList(i*10,i*10+10);
    System.out.println(a);
    }
    }}
      

  4.   


    public static void main(String[] args) {
            Set<Integer> box = new HashSet<Integer>();
            for(int i=0;i<100;i++){
                box.add(i+1);
            }
            Iterator<Integer> iterator = box.iterator();
            int y = 1;
            while (iterator.hasNext()) {
                if (y % 10 == 1) {
                    System.out.println();
                    System.out.print("第" + (y / 10 + 1) + "个盒子里放的球:");
                }
                System.out.print(iterator.next() + " ,");
                y++;
            }
        }
      

  5.   


    List<Integer> source=new ArrayList<Integer>();
    for(Integer i=1;i<=100;i++)//100个球
    source.add(i);
    System.out.println("source= "+source);
    Set<Integer> set=new HashSet<Integer>();
    for(int i=0;i<10;i++)//10个盒
    {
    while(set.size()<10)
    {
    int j=(int)(Math.random()*source.size());
    set.add(source.get(j));
    source.remove(j);
    }
    System.out.print("第["+(i+1)+"]=");
    for(Integer g:set)
    {
    System.out.print(" "+g);
    }
    System.out.println();
    set.clear();
    }
      

  6.   

    2楼效率上不是最优,但是是正确的4楼完全是错的(因为有重复的)我给一个思路,吧1-100的数字放到1个list中,然后1-10个盒子,用两重循环
    for(int i = 0 ; i < 10 ; i++)
      for(int j = 0 ; j < 10 ; j++)
        {
           每次都用 random.nextInt(list.size());
           得到的数字的位置,移除list。
        }
    }这样就可以避免每个盒子里面的数字重复,而且每个盒子的球是随机的。试一下吧。
      

  7.   

    public static void main(String[] args) {
        int[] balls = new int[100];
        for (int i = 0; i < 100; i++) {
            balls[i] = i;
        }
        Random r = new Random();
        int[][] boxes = new int[10][10];
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 10; j++) {
                int temp = r.nextInt(100 - 10 * i - j) + 10 * i + j;
                boxes[i][j] = balls[temp];
                balls[temp] = balls[10 * i + j];
            }
        }
        for (int i = 0; i < 10; i++) {
            System.out.print("Box " + i + ": ");
            for (int j = 0; j < 10; j++) {
                System.out.print(boxes[i][j] + " ");
            }
            System.out.println();
        }
    }
      

  8.   

    4 楼random()会重复的 2楼正解!!
      

  9.   

    直接给代码是显示你们JAVA学的很好,还是你们根本就没有理解java?
      这样你们不负责任的直接给代码,你们认为这样能让楼主学到东西?
       编程最重要的是思路,而不是代码懂?
      

  10.   

    四楼的是正确的,java.util.Random.nextInt(100)产生的随机数是不会有重复的
      

  11.   


    这个是会重复的,4楼是做了判断set大小是否为100所以是正确的
      

  12.   


    random()这个是会重复不错了,但Set是不可能出现重复的元素4楼相比2楼而言,更胜一层。
      

  13.   

    15楼解法思路:首先将100个数存入一个数组,然后重复执行一下步骤100次:
    对于第i次(0<=i<100),随机取出数组中第i到第99项中的随机项,记录,并且将其与第i项交换
      

  14.   


        zhishaizi => "1-100"
        arr = zhishaizi(time % 100, $)
        put("1-100",arr);
        
      

  15.   

    楼上写的就是一个面向过程的设计。用java看起来真是太悲哀了。
      

  16.   

    import java.util.HashSet;
    import java.util.Set;public class Test { public static void main(String args[]) {
    init();
    }

    public static void init() {
    Set<Ball> set = new HashSet<Ball>();
    Balls[] bs = new Balls[10];
    for(int i = 0; i < bs.length; i ++) {
    bs[i] = new Balls();
    }


    for(int i = 0; i < 100; i ++) {
    Ball b = new Ball(i);
    set.add(b);
    }

    int k = 0;
    for(Ball b : set) {
    k ++;
    bs[k%10].addBall(b);
    }
    for(Balls balls : bs) {
    System.out.println(balls);
    }
    }
    }class Ball {
    int id;
    public Ball(int id) {
    this.id = id;
    }
    public boolean equals(Object obj) {
    if(obj instanceof Ball) {
    Ball b = (Ball)obj;
    return this.id == b.id;
    }
    return false;
    }
    public int hashCode() {
    return id ^ 12345678 ^ 31;
    }
    public String toString() {
    return "(ball " + id + ")";
    }
    }class Balls {
    private Set<Ball> balls;
    public Set<Ball> getBalls() {
    return balls;
    }

    public Balls() {
    balls = new HashSet<Ball>();
    }

    public void addBall(Ball b) {
    if(balls.size() == 10) {
    return ;
    }
    balls.add(b);
    }

    public String toString() {
    String str = "";
    for(Ball b : balls) {
    str += b.toString() + "  ";
    }
    return str;
    }
    }