我写的也没问题啊?为什么用名字查找的输出结果是“花花没找到”呢?

我写的也没问题啊?为什么用名字查找的输出结果是“花花没找到”呢?

package com.immoc.set;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class CatTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
      //定义宠物猫对象
        Cat huahua=new Cat("花花",12,"英国短毛猫");
        Cat fanfan=new Cat("凡凡",3,"中华田园猫");
        //将宠物猫对象放入HashSet中
        Set set=new HashSet();
        set.add(huahua);
        set.add(fanfan);
        //显示宠物猫信息,只要提前重写好toString方法,系统会自动调用重写好的toString方法
        Iterator it=set.iterator();
        while(it.hasNext()) {
            System.out.println(it.next());
        }
        
        System.out.println("************************************");
        //1.在集合中查找对象的信息并输出
        if(set.contains(huahua)) {
            System.out.println("花花找到了");
        }else {
            System.out.println("花花没找到");
        }
        System.out.println("************************************");
        //2.在集合中使用名字查找“花花”的信息并输出
        boolean flag=false;
        Cat c=null;
        it=set.iterator();
        while(it.hasNext()) {
            c=(Cat)it.next();
            if(c.getName().equals("花花")) {
                flag=true;
                break;
            }
            if(flag) {
                System.out.println("花花找到了");
                System.out.println(c);
            }else{
                System.out.println("花花没找到");
            }
        }
        
    }
    

}

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

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

4回答
hunxiao 2018-06-02 20:57:14

按名字查找的代码有问题,if(flag)不应该放到if语句里面,要放到while里面,第一条的回复就已经指出来了

while (it.hasNext()) {
			c = it.next(); 
			if (c.getName().equals("花花")) {
				flag = true;// 找到了
				break;
			}
		}//这个地方
		if (flag) {
			System.out.println("花花找到了");
			System.out.println(c);
		} else {
			System.out.println("花花没找到");
		}


好帮手慕珊 2018-05-30 09:50:16

你的代码的逻辑还是有些问题,if(flag)的判断不应该写到循环里,如果找到花花就会执行break语句,就跳出循环了,后面的if(flag)根本不会执行到。祝学习愉快!

http://img1.sycdn.imooc.com//climg/5b0e02ad0001a62c05190641.jpg

好帮手慕雪 2018-05-28 10:21:28

http://img1.sycdn.imooc.com//climg/5b0b66d00001db0f04960172.jpg

没问题的呀,这就是用你程序运行输出的结果。是不是你的程序没有保存运行的呢。

  • 提问者 慕粉2336335747 #1
    不是,在编码中我用了两种方式来查找花花的存在,注释1、2说了一个查找方法是在集合中查找对象的信息并输出;另一个查找是在集合中使用名字查找“花花”的信息并输出;而我的代码中就是第二个方法没执行出来,很奇怪
    2018-05-29 20:13:42
提问者 慕粉2336335747 2018-05-27 22:00:35

package com.immoc.set;

public class Cat {
  private String name;
  private int month;
  private String species;
public Cat(String name, int month, String species) {
    super();
    this.name = name;
    this.month = month;
    this.species = species;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public int getMonth() {
    return month;
}
public void setMonth(int month) {
    this.month = month;
}
public String getSpecies() {
    return species;
}
public void setSpecies(String species) {
    this.species = species;
}
//如果不重写toString方法,那么在测试方法中HashSet调用出来的对象输出的是地址信息而不是对象内容!
@Override
public String toString() {
    return "[姓名:" + name + ", 年龄:" + month + ", 品种:" + species + "]";
}
@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + month;
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    result = prime * result + ((species == null) ? 0 : species.hashCode());
    return result;
}
@Override
public boolean equals(Object obj) {
    if(this==obj) {
        return true;
    }
    if(obj.getClass()==(Cat.class)) {
        Cat cat=(Cat)obj;
        return cat.getName().equals(name)&&(cat.getMonth()==month);
        
    }
    return false;
}
 
}



以上是补写我的问题中的自定义类,求大神解答一下

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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