j2me人机对话

q3589225431 2008-11-18 03:18:19

想做个手机程序实现人机对话程序,只做了一个界面,还不能达到对话的功能,不知到有没有高手帮我做到.
要求:有一个文本输入框,文本输入框为瑞亚说的话,文本框之下为苏菲的回答,手机左键为确认按钮,文本框输入相应文字,左键点确认按钮之后,把瑞亚和苏菲说的话一起打印到文本框之下,最少实现两句对话。打印之后清空文本框。只要求能对相应的文字输入,作相应的文字打印。 第一句:输入“你几岁”,打印“20岁”,第二句:输入“做什么的”,打印“学IT的”,能否把完整代码发到lingwuersan@163.com,非常感谢。

public class rrr2 extends MIDlet implements ItemCommandListener{
private Form props = new Form("对话框");
private Display dis;
private TextField tfAcc = new TextField("瑞亚","",20,TextField.ANY);
private Command cmdDel = new Command("←清除",Command.SCREEN,1);
public rrr2() {
}

protected void startApp() throws MIDletStateChangeException {
// TODO Auto-generated method stub
dis = Display.getDisplay(this);
dis.setCurrent(props);
props.append(tfAcc);
tfAcc.addCommand(cmdDel);
tfAcc.setItemCommandListener(this);
props.append("苏菲:rtgerrte\n");
}
public void commandAction(Command c, Item i) {
System.out.println("悬着");
if(c==cmdDel){
TextField tf = (TextField)i;
int position = tf.getCaretPosition();
tf.delete(position-1, 1);
}
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO Auto-generated method stub

}

protected void pauseApp() {
// TODO Auto-generated method stub
}
}
不管用什么方法,只要能做出来在WTK2.5能运行就行如果有那位朋友做出来了,直接把源代码发来就OK,在下是初学者,就算你提示了,我也不会啊,只有麻烦各位直接把源代码发到lingwuersan@163.com,我就万分感谢。
...全文
122 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
kf156 2008-11-30
  • 打赏
  • 举报
回复
多实践吧,我也是学J2ME游戏出来的,不过现在是搞应用,游戏的还没深入就忘光了
多看别人的优秀代码,学习他们的思路。自己再实践掌握。
可以先从一些小游戏开始
q3589225431 2008-11-29
  • 打赏
  • 举报
回复
哦,我现在在学J2ME游戏,不知道你有什么建议?
kf156 2008-11-29
  • 打赏
  • 举报
回复
我是通过部分匹配,来判断输入的文字。
想要真正实现高智能,还是比较复杂的,不过也是可以实现的。像你说的加入各种符号什么的
不过主要还是看需求。
q3589225431 2008-11-29
  • 打赏
  • 举报
回复
还有就是为什么输入其它字符,比如,。#?—*/等,为什么都不能识别。再就是只要前面输入正确了,后面添加任何字符指令都能通过,不知道是什么原因。
q3589225431 2008-11-29
  • 打赏
  • 举报
回复
kf156 真棒
yyh84yangtao 2008-11-23
  • 打赏
  • 举报
回复
kf156 2008-11-22
  • 打赏
  • 举报
回复
这并不是是控制台输入,是手机上的输入。
不是想不想回答的问题,而是我的回答能给你什么帮助。
如果你这是学习上的探讨那当然好了,不过感觉你只是想证明些什么...


import java.util.Random;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class MyMidlet extends MIDlet implements CommandListener {
Form f = new Form("人机对话");

Command send = new Command("确定", Command.OK, 1);

Command cls = new Command("清除记录", Command.CANCEL, 1);

Command exit = new Command("退出", Command.EXIT, 1);

TextField tf1 = new TextField("瑞亚", "", 20, TextField.ANY);

Display display = Display.getDisplay(this);

public MyMidlet() {
// TODO 自动生成构造函数存根
f.append(tf1);
f.addCommand(send);
f.addCommand(exit);
f.addCommand(cls);
f.setCommandListener(this);
}

protected void destroyApp(boolean arg0) {
// TODO 自动生成方法存根

}

public void exitApp() {
destroyApp(true);
notifyDestroyed();

}

protected void pauseApp() {
// TODO 自动生成方法存根

}

protected void startApp() throws MIDletStateChangeException {

// TODO 自动生成方法存根
display.setCurrent(f);

}

private String[] words = { "20", "学IT的", "您的输入不正确", "34", "21", "44", "知道",
"是的" };

private boolean flag;

public void commandAction(Command c, Displayable d) {
// TODO 自动生成方法存根
if (c == send) {
String s = tf1.getString().trim();
if (s.startsWith("你几岁了")) {
f.append("瑞亚:" + tf1.getString() + "\n");
f.append("苏菲:" + words[0] + "\n");
tf1.setString("");

} else if (s.endsWith("做什么的")) {
f.append("瑞亚:" + tf1.getString() + "\n");
f.append("苏菲:" + words[1] + "\n");
tf1.setString("");

} else if (s.endsWith("输入一个两位数")) {
f.append("瑞亚:" + tf1.getString() + "\n");
f.append("苏菲:" + words[random(3, 5)] + "\n");
tf1.setString("");

} else if (s.equals("你知道达芬奇吗")) {
f.append("瑞亚:" + tf1.getString() + "\n");
f.append("苏菲:" + words[6] + "\n");
tf1.setString("");
flag = true;

} else if (flag && s.startsWith("你觉得他画画")) {
f.append("瑞亚:" + tf1.getString() + "\n");
f.append("苏菲:" + words[7] + "\n");
tf1.setString("");

} else {
f.append("瑞亚:" + tf1.getString() + "\n");
f.append("苏菲:" + words[2] + "\n");
tf1.setString("");
}

} else if (c == cls) {
f.deleteAll();
f.append(tf1);
} else if (c == exit) {
exitApp();
}
}

public static Random rdm = new Random();

public static int random(int l, int h) {
return (rdm.nextInt() >>> 1) % (h - l) + l;
}
}
q3589225431 2008-11-22
  • 打赏
  • 举报
回复
非常感谢kf156 你做出来了做的很好,之前还有人说MIDP不支持控制台输入,我想他是不懂。

不知道还能不能做个随机回答的,比如说:输入“请输入一个两位数”,则打印:“34”或“21”或“44”等 ,是程序已经设定好了34,21,44,这三个数的。

还有能不能在语句里嵌套语句,比如说:输入“你知道达芬奇吗”则打印:“知道”,“你觉得他画画的好吗”,则打印:“是的”,先问了“你知道达芬奇吗”才能问“你觉得他画画的好吗”,不要一开始就能问“你觉得他画画的好吗”也打印:“是的”。这样就没有人这个对象了。

如果你不想回答这个问题那我就把贴结了
QQ358922543 2008-11-22
  • 打赏
  • 举报
回复
你做出来了做的很好,之前还有人说MIDP不支持控制台输入,我想他是不懂。

不知道还能不能做个随机回答的,比如说:输入“请输入一个两位数”,则打印:“34”或“21”或“44”等 ,是程序已经设定好了34,21,44,这三个数的。

还有能不能在语句里嵌套语句,比如说:输入“你知道达芬奇吗”则打印:“知道”,“你觉得他画画的好吗”,则打印:“是的”,先问了“你知道达芬奇吗”才能问“你觉得他画画的好吗”,不要一开始就能问“你觉得他画画的好吗”也打印:“是的”。这样就没有人这个对象了。

如果你不想回答这个问题那我就把贴结了
xiaoyilong19 2008-11-21
  • 打赏
  • 举报
回复
lz老不结贴给分,就没人给你回答了
kf156 2008-11-20
  • 打赏
  • 举报
回复
你的要求已经是人工智能了,虽然只是非常简单的人工智能,因为它要识别输入的文字。
在这基础上扩展就是聊天机器人了...

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class MyMidlet extends MIDlet implements CommandListener {
Form f = new Form("人机对话");

Command send = new Command("确定", Command.OK, 1);

Command cls = new Command("清除记录", Command.CANCEL, 1);

Command exit = new Command("退出", Command.EXIT, 1);

TextField tf1 = new TextField("瑞亚", "", 20, TextField.ANY);

Display display = Display.getDisplay(this);

public MyMidlet() {
// TODO 自动生成构造函数存根
f.append(tf1);
f.addCommand(send);
f.addCommand(exit);
f.addCommand(cls);
f.setCommandListener(this);
}

protected void destroyApp(boolean arg0) {
// TODO 自动生成方法存根

}

public void exitApp() {
destroyApp(true);
notifyDestroyed();

}

protected void pauseApp() {
// TODO 自动生成方法存根

}

protected void startApp() throws MIDletStateChangeException {

// TODO 自动生成方法存根
display.setCurrent(f);

}

private String[] words = { "20", "学IT的", "您的输入不正确" };

public void commandAction(Command c, Displayable d) {
// TODO 自动生成方法存根
if (c == send) {
if (tf1.getString().trim().startsWith("你几岁了")) {
f.append("瑞亚:" + tf1.getString() + "\n");
f.append("苏菲:" + words[0] + "\n");
tf1.setString("");

} else if (tf1.getString().trim().startsWith("做什么的")) {
f.append("瑞亚:" + tf1.getString() + "\n");
f.append("苏菲:" + words[1] + "\n");
tf1.setString("");

} else {
f.append("瑞亚:" + tf1.getString() + "\n");
f.append("苏菲:" + words[2] + "\n");
tf1.setString("");
}

} else if (c == cls) {
f.deleteAll();
f.append(tf1);
} else if (c == exit) {
exitApp();
}
}
}
kf156 2008-11-20
  • 打赏
  • 举报
回复
很简单,是你自己把问题说复杂了
你在另一篇文章上写不要求人工智能,可这里却要求对相应语句做相应回复。
QQ358922543 2008-11-20
  • 打赏
  • 举报
回复
我要求输入什么才答什么啊,不要输入这个回答是那个,1:输入“你几岁”,打印“20岁”,2:输入“做什么的”,打印“学IT的”,3:如果输入别的,则回答:“你的输入不正确”。怎么这样是不是很难做。是不是没人会做啊??/
rongyuanma 2008-11-19
  • 打赏
  • 举报
回复
学习楼上的,
kf156 2008-11-18
  • 打赏
  • 举报
回复
好了,别再到处发了,我在原基础上添加了记录清除


import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class MyMidlet extends MIDlet implements CommandListener {
Form f = new Form("人机对话");

Command send = new Command("确定", Command.OK, 1);

Command cls = new Command("清除记录", Command.CANCEL, 1);

Command exit = new Command("退出", Command.EXIT, 1);

TextField tf1 = new TextField("瑞亚", "", 20, TextField.ANY);

TextField tf2 = new TextField("苏菲", "", 20, TextField.ANY);

Display display = Display.getDisplay(this);

public MyMidlet() {
// TODO 自动生成构造函数存根
f.append(tf1);
f.append(tf2);
f.addCommand(send);
f.addCommand(exit);
f.addCommand(cls);
f.setCommandListener(this);
}

protected void destroyApp(boolean arg0) {
// TODO 自动生成方法存根

}

public void exitApp() {
destroyApp(true);
notifyDestroyed();

}

protected void pauseApp() {
// TODO 自动生成方法存根

}

protected void startApp() throws MIDletStateChangeException {
// TODO 自动生成方法存根
display.setCurrent(f);
}

private int i;// 不用人工智能,纯粹用个记数器

private String[] words = { "20", "学IT的", "有什么话想对我说呢", "别再说了,懒得理你" };

public void commandAction(Command c, Displayable d) {
// TODO 自动生成方法存根
if (c == send) {
if (tf1.getString().trim().equals("")) {
f.append("瑞亚:" + tf1.getString() + "\n");
f.append("苏菲:" + words[2] + "\n");
tf1.setString("");
tf2.setString("");
} else if (i < 2) {
f.append("瑞亚:" + tf1.getString() + "\n");
f.append("苏菲:" + words[i] + "\n");
tf1.setString("");
tf2.setString("");
i++;
} else {
f.append("瑞亚:" + tf1.getString() + "\n");
f.append("苏菲:" + words[3] + "\n");
tf1.setString("");
tf2.setString("");
}

} else if (c == cls) {
f.deleteAll();
f.append(tf1);
f.append(tf2);
} else if (c == exit) {
exitApp();
}
}
}

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧