为了账号安全,请及时绑定邮箱和手机立即绑定

将while循环改为for循环结果就出问题了,输出的结果若已添加ID 1的学生,再重复添加ID 1,则最后只能添加两个学生就结束了

package com.dh.collection2;


import java.util.HashMap;

import java.util.HashSet;

import java.util.Map;

import java.util.Scanner;

import java.util.Set;


/**  

 * Map(key(不可重复)-value)   实现添加学生

 *

 */

public class MapTest {

public Map<String,Student> students;  //泛型,key是String,value是Student

public MapTest() {  //构造器初始化students

this.students=new HashMap<String,Student>();

}

/*

* put添加学生: 判断学生ID是否被占用(避免重复添加),若未重复则输入姓名,创建新学生对象,添加到students

*/

public void testPut() {

Scanner sc=new Scanner(System.in);

for(int i=0;i<3;i++) {  //输入三个学生

System.out.println("请输入学生ID:");

String ID=sc.nextLine();

Student st=students.get(ID);  //取得这个ID,比较输入的ID,判断是否重复

if(st==null) {

//提示输入姓名

System.out.println("请输入学生姓名:");

String name=sc.nextLine();

Student newStudent=new Student(ID,name);

students.put(ID, newStudent);

System.out.println("成功添加学生:"+students.get(ID).name);

}else {

System.out.println("该学生ID已被占用!");

continue;

}

}

}

/*

* 测试并利用keySet方法,返回Map中所有key的set集合

*/

public void testKeySet() {

Set<String> keySet=students.keySet();

System.out.println("共有"+students.size()+"个学生");

//遍历keySet,取得每个key,再调用get取得对应的value

for(String stuID:keySet) {

Student st=students.get(stuID);

if(st!=null) {

System.out.println("学生"+st.name);

}

}

}

public static void main(String[] args) {

MapTest mp=new MapTest();

mp.testPut();

mp.testKeySet();

}

}


正在回答

3 回答

原先i++是写在if判断语句的末尾,只在成功添加后i+1,现在for循环条件在if(){}else{}两个条件任意之一执行完都会i+1.

1 回复 有任何疑惑可以回复我~
#1

慕西游 提问者

非常感谢!
2018-06-04 回复 有任何疑惑可以回复我~

可以把 i++单独拿出来放到 if 里边

1 回复 有任何疑惑可以回复我~

int i=0;

for(;i<3;) {

System.out.println("请输入学生ID:");

String ID=console.next();

//判断该ID是否被占用

Student st=students.get(ID);

if(st==null) {

System.out.println("请输入学生姓名:");

String name=console.next();

//创建新的学生对象

Student newStudent=new Student(ID, name);

//通过调用student的put方法,添加ID-学生映射

students.put(ID, newStudent);

System.out.println("成功添加学生:"+students.get(ID).name);

   i++;

}else {

System.out.println("该学生ID已被占用");

continue;

}

}

可以这样来

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

将while循环改为for循环结果就出问题了,输出的结果若已添加ID 1的学生,再重复添加ID 1,则最后只能添加两个学生就结束了

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号