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

来源:5-2 学生选课---使用 Map 添加学生

慕西游

2018-05-25 10:27

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回答

  • 跳动的数字
    2018-05-25 12:20:20
    已采纳

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

    慕西游

    非常感谢!

    2018-06-04 15:54:26

    共 1 条回复 >

  • 船到桥头自然直哈
    2018-08-09 15:25:55

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

  • 全村希望007
    2018-08-03 15:48:12

    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;

    }

    }

    可以这样来

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409768 学习 · 4463 问题

查看课程

相似问题