如果用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
同学你好,使用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()+"层电梯的花");
}
}祝学习愉快~
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()+"层电梯的花");
}
} //正确的源码
https://class.imooc.com/course/qadetail/319665
之前想了一个办法被说过时了
- 参与学习 人
- 提交作业 9410 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星