java 聊天猜拳机器人
2016-12-06本随笔记录第一次学习经过。
工具:eclipse;JAVA JDK;
语言:java
时间:2016.11.23
作者:潇洒鸿图
地址:http://www.cnblogs.com/xuehx/p/6094785.html
一、
备注:采用最简单if语句能够实现最简单的人机对话,但是程序只能回复一次,一次之后结束运行,很尴尬。(后续使用else if可以继续执行,未加的不能执行.2016.11.25.)
1 import java.util.Scanner; 2 3 //下面是一个最简单的人机互动对话代码,最简单的聊天机器人。 4 public class a { 5 public static void main(String[] args) { 6 Scanner scan=new Scanner(System.in); 7 String talk = scan.next();//把从控制台输入的信息复制给talk。 8 9 if(talk.contains("哈喽")){ 10 System.out.println("哈喽!how are you?");} 11 if(talk.contains("名字")){ 12 System.out.println("我的名字叫做:蛋白robot");} 13 if(talk.contains("作者")){ 14 System.out.println("我的作者是:蛋白");} 15 } 16 }
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
二、
备注:采用while(true)嵌套if的方式,不仅可以实现最简单的人机对话,还能使程序运行一次之后不中断。
1 public static void b(){ 2 Scanner sc = new Scanner(System.in); 3 String talk=""; 4 5 while(true){ 6 talk=sc.next(); 7 if(talk.contains("哈哈"))
{System.out.println("嘿嘿");} 8 if(talk.contains("嘿嘿"))
{System.out.println("嘿嘿嘿");} 9 if(talk.contains("嘿哈"))
{System.out.println("嘿+4");} 10 } 11 }
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
三、
备注:使用n.contains(n),可以实现人机之间更逼真的互动。2016.11.24日续。
1 public static void wen() { 2 Scanner scan = new Scanner(System.in); 3 String n2 = null; 4 5
6 System.out.println("你叫什么名字:"); 7 String n = scan.next(); 8 if(n.equals(n)){ 9 System.out.println(n + " 大大你好");} 10
11 while (true) { 12 String talk = scan.next(); 13 // 模糊查询,contains包含 14 if (talk.contains("你好")) { 15 System.out.println("你好!how do you do?");} 16 if (talk.contains("无聊")) { 17 System.out.println("无聊?那我们来玩游戏吧");} 18 } 19 20 }
效果如图:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
四、
备注:1、使用break;可以结束while(true)的死循环,以便结束程序。
2、把对话库重新声明一个方法talk,以便阅读和修改。
3、缺点:当判断不了对话内容时,不打印语句。
2016.11.25日续。
1 package com.tz.util; 2 3 import java.util.Scanner; 4 5 public class c { 6 public static void main(String[] args) { 7 8 c1(); 9 10 } 11 12 //对话方法调用1.1 13 public static void c1() { 14 Scanner scan = new Scanner(System.in); 15 16 System.out.println("你叫什么名字:"); 17 String n = scan.next(); 18 19 if(n.equals(n)){ 20 System.out.println(n + ",你好");} 21 22 talk(); 23 } 24 25 //对话方法调用1.2 26 public static void talk() { 27 Scanner scan = new Scanner(System.in); 28 29 while (true) { 30 String talk = scan.next(); 31 32 if (talk.contains("你好")) { 33 System.out.println("你好!how do you do?");} 34 if (talk.contains("无聊")) { 35 System.out.println("无聊?那我们来玩游戏吧");} 36 if (talk.contains("玩")) { 37 System.out.println("那我们来玩剪刀石头布吧");} 38 if (talk.contains("石头")) { 39 System.out.println("我出布,你输了");} 40 if (talk.contains("剪刀")) { 41 System.out.println("我出石头,我赢了");} 42 if (talk.contains("布")) { 43 System.out.println("我出剪刀,我赢了");} 44 if (talk.equals("再见")) { 45 System.out.println("再见,我们下次再玩"); 46 System.out.println("程序关闭");break;} 47 48 } 49 50 } 51 52 }
效果如图:
~~~~~~~~~~~~~~~~~
五、
备注:(1)优点:数组结合随机数可以实现程序的随机输出。使输出的结果出人意料无法预测
(2)使用System.exit(0);使系统真正正常退出。在被其他类调用时不会自起。
(3)缺点:运行量(次数)增大,此处应用不够灵活。
时间:2016.12.6号---->14:49:38
1 package com.tz.util; 2 3 import java.util.Scanner; 4 5 public class c { 6 //全局变量 7 static Scanner scan = new Scanner(System.in); 8 static int a; 9 //主函数 10 public static void main(String[] args) { 11 12 c1(); 13 } 14 15 //对话方法调用1.1 16 public static void c1() { 17 System.out.println("你叫什么名字:"); 18 String n = scan.next(); 19 20 if(n.contains(n)){/*问候*/ 21 System.out.println(n + " 大大你好");} 22 talk();/*剪刀石头布游戏*/ 23 } 24 25 26 //对话方法调用1.2,,剪刀石头布回复方法 27 public static void talk() { 28 while (true){ 29 a=(int) (Math.random()*10);//随机数产生工具 30 if (a<3) {/*符合条件才往下运行,否则重新生成数字*/ 31 String talk = scan.next();/*接收用户的指令*/ 32 //打招呼 33 if (talk.contains("你好")) { 34 System.out.println("你好!how do you do?");} 35 if (talk.contains("无聊")) { 36 System.out.println("无聊?那我们来玩游戏吧");} 37 if (talk.contains("玩")) { 38 System.out.println("那我们来玩剪刀石头布吧");} 39 //剪刀石头布方法 40 if (talk.contains("布")) { 41 String[] tr={"我出布,平局","我出石头,我输了","我出剪刀,我赢了!"}; 42 System.out.println(tr[a]);}/*下标为:>0&&<3的随机整数。可随机输出tr数组的某一值。*/ 43 if (talk.contains("石头")) { 44 String[] tr={"我出布,你输了","我出石头,平局","我出剪刀,我输了"}; 45 System.out.println(tr[a]);}/*下标为:>0&&<3的随机整数。可随机输出tr数组的某一值。*/ 46 if (talk.contains("剪刀")) { 47 String[] tr={"我出布,我输了","我出石头,我赢了","我出剪刀,平局"}; 48 System.out.println(tr[a]);}/*下标为:>0&&<3的随机整数。可随机输出tr数组的某一值。*/ 49 //跳出循环 50 if (talk.contains("再见")||talk.contains("拜拜")) { 51 System.out.println("再见,下次再来!!"); 52 System.out.println("程序关闭!"); 53 System.exit(0);//exit(0)就是正常退出,非0就是异常退出 54 break;} 55 } 56 } 57 } 58 59 60 61 }
效果图: