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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package com.itheima.Demo;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Scanner;

import com.itheima.bean.Robot;

/*
*         模拟一个机器人与人对话的情景
* 创建一个机器人,该类有:状态(string) 和 话术(HashMap<string,string>)两个属性
* a. 添加话术(将一下的信息分别添加到map话术中)
*                 key(指令)                :                value(应答)
*                 "你好"                :                "您好,主人"
*                 "我饿了"                :                "您想吃什么,但是我不会做"
*                 "拜拜"                :                "拜拜"
* b. 根据用户在控制台输入的指令,打印出应答的话术,如果用户输入的指令没有对应的应答,则提示"对不起,我不知道怎么回答",直到用户
* 说拜拜,并且应答拜拜后才可以停止键盘录入(键盘录入之前需要检查当前机器人的状态)
* c. 将以上所有跟机器人的对话内容存入当前项目info.txt中
*/
public class Test11 {

        /**
         * @param args
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {
                HashMap<String, String> hs = new HashMap<>();
                hs.put("你好", "您好,主人");
                hs.put("我饿了", "您想说什么,但我不会做");
                hs.put("拜拜", "拜拜");

                String state = "close";
                Robot rt = new Robot(state, hs);

                /*
                 * b. 根据用户在控制台输入的指令,打印出应答的话术,如果用户输入的指令没有对应的应答,则提示"对不起,我不知道怎么回答",直到用户
                 * 说拜拜,并且应答拜拜后才可以停止键盘录入(键盘录入之前需要检查当前机器人的状态)
                 */
                Scanner sc = new Scanner(System.in);
                System.out.println("机器人当前状态为" + rt.getState() + "(输入\"open\"打开机器人)");
                while (true) {
                        String s = sc.nextLine();
                        if ("open".equals(s)) {
                                System.out.println("指令正确,机器人已开启,您现在可以跟机器人交流啦!!");
                                rt.setState(s);
                                BufferedWriter bw = new BufferedWriter(new FileWriter(
                                                "info.txt"));
                                while (true) {
                                        String line = sc.nextLine();
                                        if ("拜拜".equals(line)) {
                                                System.out.println(rt.getSpeak().get(line));
                                                bw.write(line + " -  " + rt.getSpeak().get(line));
                                                break;
                                        } else if (rt.getSpeak().containsKey(line)) {
                                                System.out.println(rt.getSpeak().get(line));
                                                bw.write(line + " -  " + rt.getSpeak().get(line));
                                        } else {
                                                System.out.println("对不起,我不知道怎么回答");
                                                bw.write(line + " -  " + "对不起,我不知道怎么回答");
                                        }
                                        bw.newLine();
                                }
                                bw.close();
                                break;
                        } else {
                                System.out.println("您输入的指令不对,请重新输入打开机器人的指令:");
                        }
                }
        }
}


点评

每一个实用的软件都是从好玩的小程序开始的  发表于 2016-9-7 20:34

320 个回复

正序浏览
想看下robot实体类是怎么写的
回复 使用道具 举报
真厉害,以我目前的水平来看,是有点困难,继续学习
回复 使用道具 举报
我说呢,还差点东西,本来想弄着玩的!{:2_30:}{:2_30:}{:2_30:}
回复 使用道具 举报
ObjectGitHub 发表于 2016-9-12 08:32
while循环中用switch应该更简便

用switch只能单个判断,不能用是否包含建来判断了,那样更麻烦............
回复 使用道具 举报
tiamo305 发表于 2016-9-16 10:21
这不是我班上的大神写的吗??

what???how??
回复 使用道具 举报
不错,真会玩。。。。。。。。
回复 使用道具 举报
真是好玩啊啊啊啊啊啊啊啊啊啊啊啊啊啊
回复 使用道具 举报
这不是我班上的大神写的吗??
回复 使用道具 举报
刚开始学,表示看的有点晕头转向,但是貌似挺有范的样子?
回复 使用道具 举报
新的一天开始,努力,奋斗
回复 使用道具 举报
新的开始.努力哦!!!
回复 使用道具 举报
新的一天新的开始
回复 使用道具 举报
会玩,可以,明儿个我也写个
回复 使用道具 举报
中秋快乐!
回复 使用道具 举报
66666666666666666666666666666
回复 使用道具 举报
祝大家中秋节快乐
回复 使用道具 举报
中秋节快乐!!!
回复 使用道具 举报
咋不更新了 这都是以前的
回复 使用道具 举报
支持下....
回复 使用道具 举报
中秋佳节,敲打代码,善哉善哉
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马