使用遍历器遍历map时返回空值

//登录模块
public boolean todo(String name, String password,Map<Integer,User> map) {
		boolean b = false;
		Iterator a = map.keySet().iterator();
		while (a.hasNext()) {
			User c = (User) a.next();
			if (name.equals(c.getName()) && password.equals(c.getPsd())) {
				b = true;
				break;
			}
		}
		return b;

	}
//User 对象
public class User {
private String name;
private String psd;
private StringBuffer phone;
private Double price;
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public String getPsd() {
	return psd;
}
public void setPsd(String psd) {
	this.psd = psd;
}
public StringBuffer getPhone() {
	return phone;
}
public void setPhone(StringBuffer phone) {
	this.phone = phone;
}
public double getPrice() {
	return price;
}
public void setPrice(Double price) {
	this.price = price;
}
public User(String name, String psd, StringBuffer phone, Double price) {
	super();
	this.name = name;
	this.psd = psd;
	this.phone = phone;
	this.price = price;
}
public User() {
	super();
	// TODO Auto-generated constructor stub
}
@Override
public String toString() {
	return "User [姓名=" + name + ", 密码=" + psd + ", 手机号=" + phone + ", 余额=" + price + "]";
}
}
//调用以上代码
if(ur.size()==0){
					User user2 = new User("123","123",null,(double) 0);
					ur.put(0, user2);
				}
				System.out.println("请输入姓名:");
				String name=input.next();
				System.out.println("请输入密码:");
				String password=input.next();
				doLogin doLogin = new doLogin();
				if(doLogin.todo(name, password, ur)){
					System.out.println("登录成功");
				}
				break;

封装好的User  即使将price 改成包装类 依然报这个错误

Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to com.kgc.User

Integer不能转换成user对象,错误很明显啊,你的,Map<Integer,User> map 制定泛型key为Integer,但是你遍历时Iterator a = map.keySet().iterator();取了所有的键,还把它强转成user,

直接取值就好了:

Iterator a = map.values().iterator();

 

Integer不能转换成user对象,错误很明显啊,你的,Map<Integer,User> map 制定泛型key为Integer,但是你遍历时Iterator a = map.keySet().iterator();取了所有的键(键为Integer),还把它强转成user,

ur.put(0, user2);
你的ur Map对象是怎么定义的

Iterator a = map.keySet().iterator();
		while (a.hasNext()) {
			User c = (User) a.next();
			if (name.equals(c.getName()) && password.equals(c.getPsd())) {
				b = true;
				break;
			}
		}

====================================================================
改成

for(User user : map.values){
    if (name.equals(c.getName()) && password.equals(c.getPsd())) {
				b = true;
				break;
	}
}

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632