如果用TreeSet何让Flower对象中的floor属性不要随着随机生成的花朵大小size一起变,而是固定生成1到10呢?

如果用TreeSet何让Flower对象中的floor属性不要随着随机生成的花朵大小size一起变,而是固定生成1到10呢?

package com.imooc.flowers;
public class Flower {
    private Integer floor;
    private Integer size;
    public Flower (){
    }
    public Flower(Integer floor, Integer size) {
        this.floor = floor;
        this.size = size;
    }
    public Integer getFloor() {
        return floor;
    }
    public void setFloor(Integer floor) {
        this.floor = floor;
    }
    public Integer getSize() {
        return size;
    }
    public void setSize(Integer size) {
        this.size = size;
    }
}
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)); //生成1到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()+"层电梯的花");
    }
}


运行结果就是有的层数由于TreeSet元素值必须唯一的特性被自动过滤掉了,而会产生不是1到10之间这个区间之内的数字

我的思路是新增了一个Flower对象 内含两个属性 一个是花朵的size还有一个花朵所在楼层floor 两者都是Integer属性,然后再用TreeSet的唯一性添加随机生成的花朵大小size,flower = new Flower(i++, size); 

把他们添加进TreeSet flowerSet.add(flower); 

但这里有一个问题就是生成的TreeSet对应的floor可能不是1到10而有可能是断开的,

如何让Flower对象中的floor属性不要随着随机生成的花朵大小size一起变,而是固定的1到10呢?

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

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

4回答
好帮手慕小蓝 2022-03-15 10:48:54

同学你好,使用TreeSet实现该问题的代码和思路如下代码和注释:

public class Test {
	public static void main(String[] args) {
		TreeSet<Flower> flowerSet = new TreeSet<Flower>(new Comparator<Flower>() {
            public int compare(Flower o1, Flower o2) {
                return o2.getSize()-o1.getSize();
            }
        });
		
		//随机生成花束的尺寸,这里不建议生成1-10,因为HashSet的算法中会使得数据被部分排序,建议生成的数字区间放大一些
		Set<Integer> set = new HashSet<Integer>();
		while(true) {
			int i= ((int)(Math.random()*1000)); //生成1到1000的数字
			set.add(i);
			if(set.size() == 10) break;
		}
		//遍历上面的set集合,将其赋值给Flower的size属性
		//楼层从1开始
		int floor = 1;
		for (Integer size : set) {
			Flower f = new Flower(floor, size);
			floor++;
			//将创建的Flower对象存储在TreeSet中
			flowerSet.add(f);
		}
		//遍历展示每层花束的结果
		for(Flower flower1 : flowerSet){
            System.out.println(flower1.getFloor()+":"+flower1.getSize());
        }
        System.out.println("应当选取"+flowerSet.first().getFloor()+"层电梯的花");
		
	}
}

祝学习愉快~

晓舟 提问者 2022-03-15 10:42:48

就是我把这个题目的需求改的更细致一些,只能用1到10去表示花朵的大小,对应着1到10层楼~~不能用map实现,只能用list和set实现


  • 提问者 晓舟 #1

    而且每一层楼花朵的大小不能相同

    2022-03-15 10:47:03
晓舟 提问者 2022-03-15 10:28:37

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-15 10:26:10
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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