3-9编程

3-9编程

package com.set;

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

public class StudentTest {

	public static void main(String[] args) {
		// 定义三个Student类的对象及一个HashSet类的对象
		Student st1 = new Student(1, "Tom", 87);
		Student st2 = new Student(2, "Lucy", 95);
		Student st3 = new Student(3, "William", 65);
		Set set = new HashSet();
		// 将Student类的对象添加到集合中
		set.add(st1);
		set.add(st2);
		set.add(st3);
		// 使用迭代器显示Student类的对象中的内容
		Iterator it = set.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
		// 添加一个重复数据到set中
		Student st11 = new Student(2, "Lucy", 95);
		set.add(st11);
		it = set.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());

			}
		}
	}

}
package com.set;

public class Student {
	// 根据需求完成Student类的定义
	private int stuId;
	private String name;
	private float score;
	
	public Student() {
		
	}

	public Student(int stuId, String name, float score) {
		super();
		this.stuId = stuId;
		this.name = name;
		this.score = score;
	}

	public int getStuId() {
		return stuId;
	}

	public void setStuId(int stuId) {
		this.stuId = stuId;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public float getScore() {
		return score;
	}

	public void setScore(float score) {
		this.score = score;
	}

	@Override
	public String toString() {
		return "[学号:" + stuId + ", 姓名:" + name + ", 成绩:"
				+ score + "]";
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		result = prime * result + Float.floatToIntBits(score);
		result = prime * result + stuId;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this==obj) 
			return true;
		if (obj.getClass()==Student.class) {
			Student student = (Student) obj;
			return (student.getStuId()==stuId)&&(student.getName().equals(name)&&(student.getScore()==score));
		}
		return false;
	}
	
}

为什么重复数据不管写什么都出来一个Tom

正在回答

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

1回答

http://img1.sycdn.imooc.com/climg//59647eaa0001160c08970746.jpg

程序中交叉循环太多,边输出边添加,也有数据输出的与实际不符。注意以上图中的红框处要注释掉。你是想问Lucy添加了多次为什么只会输出一次吧,那是因为你重写了equals。这两个对像是相等的,所以在Set中只会存在一个

  • 像云像雨像云 提问者 #1
    我知道我重写了equals 我只想问为什么每次都多输出一个Tom, 谢谢老师
    2017-07-11 15:36:54
  • 像云像雨像云 提问者 #2
    非常感谢!
    2017-07-11 15:42:29
  • 好帮手慕雪 回复 提问者 像云像雨像云 #3
    那是因为循环嵌套的原因呀,你把我上面说到的红框处注释一下就没有多输出了。第一次进入外层循环你先输出了一个元素(多输出的那一个元素),然后走到第24行时,重新为it赋值,相当于又从头开始遍历了。当出了内层循环,再次进入外层循环,条件不符退出循环。
    2017-07-11 15:44:49
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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