如何让TreeSet集合满足特定长度呢?

如何让TreeSet集合满足特定长度呢?

package com.imooc.flowers;
import org.junit.Test;
import java.util.*;
import static java.lang.Math.random;
public class Choosethebest {
    @Test
    public void chooseTheFlower() {
        TreeSet<Flower> flowerSet = new TreeSet<Flower>(new Comparator<Flower>() {
            public int compare(Flower o1, Flower o2) {
                return o2.getSize()-o1.getSize();
            }
        });
        Flower flower = null;
        for (int i=0; i<10; i++){
           int size= ((int)(Math.random()*10));
           flower= new Flower(String.valueOf(i+1),size);
           flowerSet.add(flower);
        }
        //这里生成的花朵大小确实每一层都不同,但是由于使用了TreeSet会自动排除与之生成花朵大小一样的层数,
        //如何让这个TreeSet正好状下10个Flower对象呢?
        
        for(Flower flower1 : flowerSet){
            System.out.println(flower1.getFloor()+":"+flower1.getSize());
        }
        System.out.println("应当选取"+flowerSet.first().getFloor()+"层电梯的花");
    }
}


package com.imooc.flowers;
public class Flower {
    private String floor;
    private Integer size;
    public Flower (){
    }
    public Flower(String floor, Integer size) {
        this.floor = floor;
        this.size = size;
    }
    public String getFloor() {
        return floor;
    }
    public void setFloor(String floor) {
        this.floor = floor;
    }
    public Integer getSize() {
        return size;
    }
    public void setSize(Integer size) {
        this.size = size;
    }
}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小蓝 2022-03-14 15:02:36

同学你好,这里可以使用死循环while(true)的形式,直到集合的size等于10的时候结束循环即可。

祝学习愉快~

  • 提问者 晓舟 #1
    package com.imooc.choosebig;
    import org.junit.Test;
    import java.util.*;
    import static java.lang.Math.random;
    public class Choose {
        @Test
        public void chooseTheFlower() {
            TreeSet<Flower> flowerSet = new TreeSet<Flower>(new Comparator<Flower>() {
                public int compare(Flower o1, Flower o2) {
                    return o2.getSize()-o1.getSize();
                }
            });
            Flower flower = null;
            int i=1;
            while(true){
                int size = ((int) (Math.random() * 10));
                flower = new Flower(i++, size);
                flowerSet.add(flower);
                if(flowerSet.size()>10) break; //运行结果一直是死循环,正确的应该怎么写呢?
            }
            
            for(Flower flower1 : flowerSet){
                System.out.println(flower1.getFloor()+":"+flower1.getSize());
            }
            System.out.println("应当选取"+flowerSet.first().getFloor()+"层电梯的花");
        }
    }


    2022-03-14 18:34:03
  • 提问者 晓舟 #2
    package com.imooc.choosebig;
    import org.junit.Test;
    import java.util.*;
    import static java.lang.Math.random;
    public class Choose {
        @Test
        public void chooseTheFlower() {
            TreeSet<Flower> flowerSet = new TreeSet<Flower>(new Comparator<Flower>() {
                public int compare(Flower o1, Flower o2) {
                    return o2.getSize()-o1.getSize();
                }
            });
            Flower flower = null;
            int i=1;
            while(true){
                int size = ((int) (Math.random() * 10));
                flower = new Flower(i++, size);
                flowerSet.add(flower);
                if(flowerSet.size()==10) break;
                //这里有一个问题层数无法做到1到10的自然排序了
            }
            for(Flower flower1 : flowerSet){
                System.out.println(flower1.getFloor()+":"+flower1.getSize());
            }
            System.out.println("应当选取"+flowerSet.first().getFloor()+"层电梯的花");
        }
    }


    2022-03-14 18:51:42
  • 好帮手慕小蓝 回复 提问者 晓舟 #3

    同学你好,老师这里测试了同学的代码,没有完全理解同学的思路。老师这里给同学提供一下解题的思路:

    首先,给每一层放置花束的步骤和对花束进行排序的步骤,应当是顺序的而不是一起处理。所以步骤应当是:

    1.假设花束的尺寸是随机生成的数字,需要将其依次放在1-10层楼中。此时发现,楼层和花束尺寸应当是成对出现的,所以使用Map集合更加简单。

    2.对花束进行排序,获取最大数字的楼层数字。此时发现,由于key是楼层数字,value是花束尺寸,那么根据value为集合排序即可。

    综上所述,建议同学使用Map集合,可以减少两个步骤的关联性,更容易编码。

    祝学习愉快~


    2022-03-15 09:59:10
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师