A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package com.heima.practise;

import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.HashMap;
import java.util.Scanner;

/**
* 在控制台输入3个学生(姓名,学号)姓名可以重复但是学号是唯一的,将输入的这3个学生存放到集合里然后在控制台打印出来并且
* 修改其中任意一个学号对应的学生姓名并将被修改的学生信息以及修改后的学生信息存放到D:\\a.txt中并且以追加的方式。
*  格式如下:
*          修改前:姓名-学号
*                修改后:姓名-学号
* @author John
*
* 分析:
* 1,创建一个键盘录入对象
* 2,创建一个HashMap集合,存储对象是<Integer,String>
* 3,将键盘录入的数据添加到HashMap集合中,使用无限循环while来设置键盘录入的次数为三次
* 4,创建一个标准打印流对象,并设置追加功能为true
* 5,遍历Map集合,将学生信息打印到控制台,并且将信息写入到写入流指定的位置
* 6,定义一个方法获取被修改的学生信息和修改后的学生信息
* 7,将方法获取的信息追加到写入流指定的位置
* 8,关流
*
*/
public class Test01 {
        public static void main(String[] args) throws Exception {
                // 1,创建一个键盘录入对象
                Scanner sc = new Scanner(System.in);
                // 2,创建一个HashMap集合,存储对象是<Integer,String>
                HashMap<Integer, String> hm = new HashMap<>();
                //3,将键盘录入的数据添加到HashMap集合中,使用无限循环while来设置键盘录入的次数为三次
                System.out.println("请输入3个学生的姓名以及学生对应的学号(姓名,学号):");
                while(hm.size() < 3) {
                        String line = sc.nextLine();
                        String[] sArr = line.split(",");
                        String name = sArr[0];
                        int id = Integer.parseInt(sArr[1]);
                        hm.put(id, name);
                       
                }
               
                //4,创建一个写入流对象,并设置追加功能为true
                PrintStream ps = new PrintStream(new FileOutputStream("D:\\a.txt", true));
                //5,遍历Map集合,将学生信息打印到控制台,并且将信息写入到写入流指定的位置
                System.out.println("学生信息修改前:");
                for (Integer key : hm.keySet()) {
                        String value = hm.get(key);
                        System.out.println(value + "-" + key);
                        ps.println("修改前 : " + value + "-" + key);
                }
               
                System.out.println("您是否需要修改学生信息?(是/否):");
                        String line = sc.nextLine();
                        if ("是".equals(line)) {
                                //6,定义一个方法获取被修改的学生信息和修改后的学生信息
                                HashMap<Integer, String> newHm = getReviseMessage(hm);
                                System.out.println("学生信息修改后:");
                                for (int key : newHm.keySet()) {
                                        //将修改后的学生信息打印到控制台上
                                        System.out.println(newHm.get(key) + "-" + key);
                                        //7,将方法获取的信息追加到写入流指定的位置
                                        ps.println("修改后 : " + newHm.get(key) + "-" + key);
                                }
                               
                        }
               
                // 8,关流
                ps.close();
                System.out.println("您录入的数据已存入到   \"D:\\a.txt\" 文件中,请注意查看!!!");
        }
       
        //获取修改学生信息后的集合
        public static HashMap<Integer, String> getReviseMessage(HashMap<Integer, String> hm) {
                Scanner sc = new Scanner(System.in);                                //创建键盘录入对象
                System.out.println("请输入你要修改学生信息的学号:");                        //提示输入要修改的信息的学生学号
                while(true) {
                        int id = sc.nextInt();                                                        //将学生学号存储到变量id里                               
                        if (hm.containsKey(id)) {                                                //判断输入的学生学生是否存在,如果输入的学生学号不存在,则提示是否重新输入(是/否)
                                Scanner sc1 = new Scanner(System.in);
                                System.out.println("请输入一个新的学生姓名:");
                                String name = sc1.nextLine();                                //如果输入的学生学号存在,那么提示输入一个新的学生姓名
                                hm.put(id, name);                                                        //将修改后的信息再次添加到集合中
                                break;                                                                                //修改完后退出循环
                        }else {               
                                System.out.println("你输入的学生学号没有对应的学生信息! 是否重新输入(是/否):");
                                String line = sc.nextLine();
                                if ("否".equals(line)) {
                                        break;
                                }
                        }
                }
                return hm;                                                                                        //返回集合hm
        }
}


评分

参与人数 1黑马币 +9 收起 理由
Lws + 9 赞一个!

查看全部评分

5 个回复

倒序浏览
一直想找这个答案,很给力,多谢楼主
回复 使用道具 举报
1289109595 来自手机 初级黑马 2016-9-6 18:03:30
藤椅
有没有方法判断value值是否相等,
回复 使用道具 举报
一起努力吧,加油!!
回复 使用道具 举报
{:2_30:}
回复 使用道具 举报
1289109595 发表于 2016-9-6 18:03
有没有方法判断value值是否相等,

有啊,可以用set集合来存储map集合的键值对,实现comparator接口,重写compare()方法来实现.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马