前面提问有一些乱,重新整理了一下
再把这道题目细致一些 即是只能用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()+"层电梯的花");
}
}祝学习愉快~
- 参与学习 人
- 提交作业 9410 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星