前面提问有一些乱,重新整理了一下
再把这道题目细致一些 即是只能用1到10去表示花朵的大小,对应着1到10层楼且每一层楼对用着得花朵大小都不能相同~~不能用map实现,只能用list和set实现
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的自然排序了,因为如果自动生成的花朵大小和前一个相同就被set filter? //then i tried another way(way2) to solve it } 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 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; } }
Way2:
package com.imooc.choosebig;
import org.junit.Test;
import java.util.*;
public class Choose {
@Test
//新建了一个set专门存储随机生成的花朵大小值
//然后再生成的同时用list存储随机生成的flower这里却报错,想问下如何修改呢?
public void chooseTheFlower() {
Set<Integer> flowerSizeSet = new HashSet<Integer>();
Flower flower = null;
List <Flower> flowerList = new ArrayList<Flower>();
int i=1;
while(true){
int size = ((int) (Math.random() * 100));
flowerSizeSet.add(size);
if(flowerSizeSet.size()==10) break;
}
Iterator flowerSizeIt =flowerSizeSet.iterator();
while(flowerSizeIt.hasNext()){
int k=0;
flower = flowerList.get(k);
flower =new Flower(k+1,(Integer) flowerSizeIt.next());
k++;
if(k==10) break;
}
for(int j=0; j<flowerList.size(); j++){
System.out.println((j+1)+"floor:"+flowerList.get(j).getSize());
}
}
}
正在回答
同学你好,这里可以使用LinkedHashSet去实现,但是由于LinkedHashSet在课程中没有涉及,所以之前老师的代码中没有使用。LinkedHashSet可以维护添加进集合的数据的顺序。实现的代码如下:
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(); } }); //随机生成花束的尺寸 Set<Integer> set = new LinkedHashSet<Integer>(); while(true) { int i= ((int)(Math.random()*10)); //生成1到10的数字 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()+"层电梯的花"); } }
祝学习愉快~
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星