Java新手,我想要做的是检索一个字符串名称,如果其中一个值在一个范围内,则会打印到屏幕上,如下所示:
public class SuperHeroes {
private Map<String, Set<Integer>> names;
private Set<Integer> pageNum;
/**
* Constructor for objects of class SuperHeroes
*/
public SuperHeroes() {
names = new HashMap<>();
pageNum = new TreeSet<>();
}
/**
* The fill() method creates 2 entries.
*/
public void fill() {
pageNum.add(1);
pageNum.add(3);
pageNum.add(7);
names.put("Kent,Clark", pageNum);
pageNum = new TreeSet<>();
pageNum.add(2);
pageNum.add(6);
pageNum.add(4);
names.put("Wayne,Bruce", pageNum);
}
public void findInRange(int num, int numb) {
for (String eachName: names.keySet()) {
for (int eachNum:pageNum) {
if(eachNum >= num && eachNum <= numb) {
System.out.println(names.get(eachName));
}
}
}
}
}
如果pageNum在范围内,则打印到屏幕的结果将是超级英雄的名称。我得到的thr输出是所有数字。我们将非常感激地提供任何帮助。如果你能指出我正确的方向将是一个帮助。
提前谢谢。
答案 0 :(得分:1)
您的代码中的第一个错误是您定义名称和pageNum的方式。它应该是这样的:
public SuperHeroes()
{
names = new HashMap<String, Set<Integer>>();
pageNum = new TreeSet<Integer>();
}
现在,您可以使用subSet()
Treeset
方法来实现您的目标。代码如下:
编辑:
从Treeset
检索给定名称的names
时,需要将返回值强制转换为TreeSet
类型。将subset
方法与tSet
一起使用时,同样如此。
public void findInRange(int num, int numb)
{
for (String eachName: names.keySet())
{
TreeSet<Integer> tSet = (TreeSet<Integer>)names.get(eachName);
TreeSet<Integer> subSet = new TreeSet<Integer>();
subSet = (TreeSet<Integer>)tSet.subSet(num,true,numb,true);//for JDK 1.6 or above. returns num<=numbers<=numb
//TreeSet<Integer> subSet = tSet.subSet(num-1, numb+1);//for JDK version less than 1.6
if (subSet.size() != 0)
{
System.out.println("Hero is "+eachName);
break;//you can ommit it if you want to print all heroes having pagenum in range num to numb
}
}
}
fill
方法也需要修改为:
public void fill()
{
pageNum.add(1);
pageNum.add(3);
pageNum.add(7);
names.put("Kent,Clark", pageNum);
pageNum = new TreeSet<Integer>();//Use proper way of object construction with generics
pageNum.add(5);
pageNum.add(6);
pageNum.add(4);
names.put("Wayne,Bruce", pageNum);
}
答案 1 :(得分:0)
首先,您必须使用超级英雄的名称来获取树集,然后读取树中的每个项目并将其与您需要的数字进行比较,如果比较为真,则打印超级英雄的名称。
看看这个链接
http://www.easywayserver.com/blog/java-treeset-example/
祝你好运
答案 2 :(得分:0)
你告诉它用行
打印与找到的名字相对应的数字 System.out.println(names.get(eachName));
如果您只想显示名称,那应该只是
System.out.println(eachname);
答案 3 :(得分:0)
我们都在猜这里。也许你需要这个:
public void findInRange(int num, int numb)
{
for (String eachName : names.keySet())
{
for (int eachNum : pageNum)
{
if (eachNum >= num && eachNum <= numb)
{
for (int temp = 0; temp < eachNum; temp ++)
{
System.out.println(eachName);
}
}
}
}
}
答案 4 :(得分:0)
想知道,你已经在构造函数中初始化了一个pageNum,为什么要在方法fill()
中创建另一个?这可能是因为构造函数中的那个可能会在填充方法中“隐藏”第二个。
答案 5 :(得分:0)
如果有人感兴趣我用以下代码解决了这个问题:
public void findInRange(int num, int numb)
{
for(String eachName: names.keySet())
{
pageNum = names.get(eachName);
for (int eachNum:pageNum)
{
if(eachNum>=num&&eachNum<=numb||eachNum>=numb&&eachNum<=num)
{
System.out.println(eachName);
break;
}
}
}
}