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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chenguoyu520 中级黑马   /  2016-7-23 11:33  /  4596 人查看  /  15 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

2黑马币
本帖最后由 chenguoyu520 于 2016-7-23 11:36 编辑

在控制台输入3个学生(姓名,学号)姓名可以重复但是学号是唯一的,将输入的这3个学生存放到集合里然后在控制台打印出来并且修改其中任意一个学号对应的学生姓名并将被修改的学生信息以及修改后的学生信息存放到D:\\a.txt中并且以追加的方式。
格式如下: 修改前:姓名-学号
                  修改后:姓名-学号


15 个回复

倒序浏览
TreeMap集合,可以设置键并排序  + IO流
回复 使用道具 举报
学号为键  姓名为值  别错了   put方法可添加也可修改    Stringbuilder 连接成一个字符串  FileWiter读到D中
回复 使用道具 举报
private static void method() throws IOException {
                Map<Integer, String> map = new HashMap<>();
                Scanner sc = new Scanner(System.in);
                System.out.println("输入3个学生(格式:姓名,学号)");
                for (int i = 0; i < 3; i++) {
                        String line = sc.nextLine();
                        String[] split = line.split(",");
                        for (int j = 0; j < split.length; j++) {
                                map.put(Integer.parseInt(split[1]), split[0]);
                        }       
                }
                BufferedWriter writer = new BufferedWriter(new FileWriter("D:\\a.txt",true));
                for (Entry<Integer, String> en : map.entrySet()) {
                        writer.write("修改前:"+ en.getValue() + "-" + en.getKey());
                        writer.newLine();
                }
                map.put(3, "赵六");
                for (Entry<Integer, String> en : map.entrySet()) {
                        writer.write("修改后:"+ en.getValue() + "-" + en.getKey());
                        writer.newLine();
                }
                writer.close();
        }
----------------------------------------------
输入:
张三,1
李四,2
王五,3
---------------------------------------------
输出:
修改前:张三-1
修改前:李四-2
修改前:王五-3
修改后:张三-1
修改后:李四-2
修改后:赵六-3

回复 使用道具 举报
1.使用hashmap集合用学号当键值,姓名为值。
2.用到FileOutputStram流里面的参数为(D://a.txt true)//true这里代表可以追加
回复 使用道具 举报
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;

public class Demo1 {

        /**
         * @param args
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {
                // TODO Auto-generated method stub
                Map<Integer, String> map1=new HashMap<Integer, String>();
                 Scanner sc = new Scanner(System.in);
         System.out.println("输入3个学生(格式:姓名,学号)");
         for(int i=0;i<3;i++){
                 String string=sc.nextLine();
                 String[] strings=string.split(",");
                 for(int j=0;j<strings.length;j++){
                         map1.put(Integer.parseInt(strings[1]),strings[0]);
                 }
         }
         BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter("G:\\a.txt",true));
         bufferedWriter.write("修改前");
         Set<Integer> ksIntegers=map1.keySet();
                Iterator< Integer> iterator=ksIntegers.iterator();
                while(iterator.hasNext()){
                        Integer keyInteger=iterator.next();
                        String valueString=map1.get(keyInteger);
                        System.out.println( valueString+"-"+keyInteger  );
                        bufferedWriter.write(valueString+ "-"+ keyInteger);
                       
                }
          map1.put(3, "王五");
         bufferedWriter.write("修改后");
          Set<Map.Entry<Integer, String>> eSet=map1.entrySet();
                Iterator<Map.Entry<Integer, String>> iterator3=eSet.iterator();
                while(iterator3.hasNext()){
                        Map.Entry<Integer, String > entry=iterator3.next();
                        Integer keyInteger=entry.getKey();
                        String valString=entry.getValue();
                        System.out.println( valString+"-"+keyInteger);
                        bufferedWriter.write(valString+ "-"+ keyInteger);
                        bufferedWriter.newLine();
                }
                bufferedWriter.close();
        }

}
回复 使用道具 举报
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;

public class Demo1 {

        /**
         * @param args
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {
                // TODO Auto-generated method stub
                Map<Integer, String> map1=new HashMap<Integer, String>();
                 Scanner sc = new Scanner(System.in);
         System.out.println("输入3个学生(格式:姓名,学号)");
         for(int i=0;i<3;i++){
                 String string=sc.nextLine();
                 String[] strings=string.split(",");
                 for(int j=0;j<strings.length;j++){
                         map1.put(Integer.parseInt(strings[1]),strings[0]);
                 }
         }
         BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter("G:\\a.txt",true));
         bufferedWriter.write("修改前");
         Set<Integer> ksIntegers=map1.keySet();
                Iterator< Integer> iterator=ksIntegers.iterator();
                while(iterator.hasNext()){
                        Integer keyInteger=iterator.next();
                        String valueString=map1.get(keyInteger);
                        System.out.println( valueString+"-"+keyInteger  );
                        bufferedWriter.write(valueString+ "-"+ keyInteger);
                        bufferedWriter.newLine();
                       
                }
          map1.put(3, "王五");
         bufferedWriter.write("修改后");
          Set<Map.Entry<Integer, String>> eSet=map1.entrySet();
                Iterator<Map.Entry<Integer, String>> iterator3=eSet.iterator();
                while(iterator3.hasNext()){
                        Map.Entry<Integer, String > entry=iterator3.next();
                        Integer keyInteger=entry.getKey();
                        String valString=entry.getValue();
                        System.out.println( valString+"-"+keyInteger);
                        bufferedWriter.write(valString+ "-"+ keyInteger);
                        bufferedWriter.newLine();
                }
                bufferedWriter.close();
        }

}
回复 使用道具 举报
问题太模糊了,用的集合与IO流。
回复 使用道具 举报
好高深的样子,表示看不懂
回复 使用道具 举报
用map集合
回复 使用道具 举报
这个是用mep集合,mep里面还能再套mep放姓名,信息对
回复 使用道具 举报
代码如下:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Scanner;

public class Test1 {
        /**
         * 在控制台输入3个学生(姓名,学号)姓名可以重复但是学号是唯一的,将输入的这3个学生
         * 存放到集合里然后在控制台打印出来并且修改其中任意一个学号对应的学生姓名并将被修改
         * 的学生信息以及修改后的学生信息存放到D:\\a.txt中并且以追加的方式。
                格式如下: 修改前:姓名-学号
                                  修改后:姓名-学号
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {
                //创建键盘录入对象
                Scanner sc = new Scanner(System.in);
                //提示输入语句
                System.out.println("请输入三个学生信息,格式为:学号,姓名");
                //创建HashMap集合接收学生信息,学号为键,姓名为值
                HashMap<String, String> hm = new HashMap<>();
                //循环录入三个学号不重复的学生信息(Map集合键唯一)
                while (hm.size() < 3) {
                        //获取键盘录入数据
                        String line = sc.nextLine();
                        //切割字符串获取字符串数组
                        String[] arr = line.split(",");
                        //判断如果格式无误,存入集合
                        if (arr.length != 2) {
                                System.out.println("输入的信息格式有误,请重新输入,格式为:学号,姓名");
                        }else {
                                hm.put(arr[0], arr[1]);
                        }
                }
                System.out.println("录入结束,录入信息如下:");
                //遍历打印hm集合
                for (Entry<String,String> en : hm.entrySet()) {
                        System.out.println(en.getKey() + "-" + en.getValue());
                }
                //创建输出流对象,将学号对应的学生信息写入文件
                BufferedWriter bw1 = new BufferedWriter(new FileWriter("d:\\a.txt"));
                //提示输入一个学号,选择对应学生
                System.out.println("请从三个学号中选择一个输入:");
                //接收录入学号信息
                String stuId = sc.nextLine();
                //将对应学号的学生信息以要求格式存入
                if (hm.containsKey(stuId)) {
                        bw1.write(stuId + "-" + hm.get(stuId));
                        bw1.newLine();
                }
                //关闭流
                bw1.close();
                //提示输入
                System.out.println("请输入该学号学生要修改成的姓名:");
                String newName = sc.nextLine();
                //修改对应学生,因为Map集合键唯一,键值相同时,新设置的元素会覆盖旧元素
                hm.put(stuId, newName);
                //创建可追加输入流对象
                BufferedWriter bw2 = new BufferedWriter(new FileWriter("d:\\a.txt",true));
                //将修改后的学生信息以追加形式存放到同一个文件中
                bw2.write(stuId + "-" + newName);
                //关闭流
                bw2.close();
                /*
                 * 运行效果如下---------:
                 *  请输入三个学生信息,格式为:学号,姓名
                        001,张三
                        002,李四
                        003,李四
                        录入结束,录入信息如下:
                        001-张三
                        002-李四
                        003-李四
                        请从三个学号中选择一个输入:
                        003
                        请输入该学号学生要修改成的姓名:
                        王五
                 */
                /*
                 * 文件夹内容如下-----------:
                 * 003-李四
                 * 003-王五
                 */
        }
}
回复 使用道具 举报
这道题可以使用Map集合来做,其实我是有点不理解你的题意 (修改其中任意一个学号对应的学生姓名并将被修改的学生信息以及修改后的学生信息存放到D:\\a.txt中并且以追加的方式。)是在程序里面改呢??还是使用键盘录入来改??  下面我使用的是键盘录入来改的,不知是不是你想要的结果?


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
        }
}
[img]file:///C:\Users\John\AppData\Roaming\Tencent\Users\791553017\QQ\WinTemp\RichOle\DW(E(49UPTBNGKI(H@(3[K1.png[/img]

DW(E(49UPTBNGKI(H@(3[K1.png (243.67 KB, 下载次数: 24)

运行图

运行图
回复 使用道具 举报
坐看答案
回复 使用道具 举报
6666666666666666666666666
回复 使用道具 举报
[AppleScript] 纯文本查看 复制代码
package myexam.test4;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map.Entry;


/*
 * 
 * 在控制台输入3个学生(姓名,学号)姓名可以重复但是学号是唯一的,将输入的
 * 这3个学生存放到集合里然后在控制台打印出来并且修改其中任意一个学号对应的
 * 学生姓名并将被修改的学生信息以及修改后的学生信息存放到D:\\a.txt中并且
 * 以追加的方式。
           格式如下: 修改前:姓名-学号
                  修改后:姓名-学号
 */
public class Test4 {

	public static void main(String[] args) throws IOException {
	
		
		getStudentsMess();
		//getReStudentMes(hm);
		
	}

	public static HashMap<String,String> getReStudentMes(HashMap<String,String> hm) throws IOException {
		System.out.println("请输入修改学生的学号");
		BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
		String key=bufr.readLine();
		System.out.println("请输入一个新的学生姓名");
		//BufferedReader bufr1=new BufferedReader(new InputStreamReader(System.in));
		String value=bufr.readLine();
		hm.put(key,value);
		return hm;
	}

	public static void getStudentsMess() throws IOException {
		System.out.println("输入3个学生(格式:姓名,学号)");

		//创建一个键盘录入对象
		BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
		//创建一个HashMap集合,用于存储学生(Sring name,int num)
		HashMap<String,String> hm=new HashMap<>();
		//键盘录入(这里不限定要录入3个学生)
		//将键盘录入的数据添加到HashMap中
		String line=null;
		while(( line=bufr.readLine())!=null){
			if("over".equals(line))
				break;
			String[] arr=line.split(",");
			
			hm.put(arr[1], arr[0]);
		}
		
		//创建一个获取修改前学生的方法
		
		//创建一个可以持续录入的写入流对象
		PrintWriter pw=new PrintWriter(new BufferedWriter(new FileWriter("D:\\a.txt")));
		
		//遍历Map集合,学生信息打印出来,写入到D:\\a.txt文件中
		for (Entry<String,String> en: hm.entrySet()) {
			//String value=hm.get(key);
			System.out.println("修改前:"+en.getValue()+"-"+en.getKey());
			pw.println("修改前:"+en.getValue()+"-"+en.getKey());
			pw.flush();
			
		}
		System.out.println("操作成功");
		HashMap<String,String>	hm2=getReStudentMes(hm);
		for(String key:hm2.keySet()){
			System.out.println("修改后:"+hm2.get(key)+"-"+key);
			pw.println("修改后:"+hm2.get(key)+"-"+key);
			//pw.flush();
		}
		//关流
		pw.close();
	}
}
输出结果:



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马