- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写以下用于聊天机器人的代码。然而,它并没有按预期工作。当我运行调试器时,它显示“再见”由于某种奇怪的原因不断被分配给“关键字”。从逻辑上讲,一切看起来都应该按预期进行。但显然不是。任何帮助表示赞赏。我对 Java 编程相当陌生。
public class Chatbot {
public Chatbot( )
{
}
/*
* Generates a variety of responses, based on what the user has stated
*/
public static void respond( String statement )
{
// use the findKeyword method to check for various cases of user statements
if( statement.length() == 0 )
{
System.out.println( "Please say something :)" );
}
else if( findKeyword( statement, "hi" ) > 0 ||
findKeyword( statement, "hello" ) > 0 ||
findKeyword( statement, "hey" ) > 0 ||
findKeyword( statement, "hiya" ) > 0 ||
findKeyword( statement, "heya" ) > 0 )
{
System.out.println( "Hello to you too!" );
}
else if( findKeyword( statement, "how are you" ) > 0 ||
findKeyword( statement, "hows it going" ) > 0 ||
findKeyword( statement, "howre you" ) > 0 ||
findKeyword( statement, "how ya doing" ) > 0 ||
findKeyword( statement, "yo wassup" ) > 0 ||
findKeyword( statement, "hey whats up" ) > 0 ||
findKeyword( statement, "whats up" ) > 0 )
{
System.out.println( "I'm good, how are you?" );
}
}
/*
* findKeyword method, returns either a 0 or a 1
* @ 0 -- keyword not found
* @ 1 -- keyword found
*/
public static int findKeyword( String statement, String keyword )
{
// This is in case the keyword is not in the statement at all
if( !statement.contains( keyword ) )
{
return 0;
}
int position = statement.toLowerCase().indexOf( keyword.toLowerCase() ); // position of the keyword in the statement
statement = " " + statement.toLowerCase().replaceAll( "\'\",.?", "") + " "; // the purpose of this statement is to allow for us to search for specific phrases w/ spaces before and after the keyword
String sub = statement.substring( position, position + keyword.length() + 1 ); // isolates the keyword with 1 character before and after
String charBeforeKeyword = sub.substring( 0, 1 ); // the character before the keyword
String charAfterKeyword = sub.substring( sub.length() - 1, sub.length() ); // the character after the keyword
/*
* Now, we check to see if the characters we isolated before are letters; if they are *
* @ If they are letters...then our keyword is part of a bigger word (e.g. if we searched for "success" and it brought us "successful"
* @ If they are not letters, then we have found our keyword with punctuation and/or spaces before/after it
*/
if( (charBeforeKeyword.compareTo( "a" ) < 0 || charBeforeKeyword.compareTo( "z" ) > 0 )
&& (charAfterKeyword.compareTo( "a" ) < 0 || charAfterKeyword.compareTo( "z" ) > 0 ))
{
return 1;
}
return 0;
}
}
import java.util.Scanner;
public class Execute
{
public static void main( String [] args )
{
// Variables and Objects
Chatbot bot = new Chatbot();
Scanner input = new Scanner( System.in );
String statement = "";
// Prompt and get the user's first input
System.out.println( "Type text to start chatting!" );
statement = input.nextLine();
// While the user doesn't say goodbye or some other form of it, respond to user and then get their next response
while( bot.findKeyword( statement, "bye" ) != 1 &&
bot.findKeyword( statement, "cya" ) != 1 &&
bot.findKeyword( statement, "goodbye" ) != 1 &&
bot.findKeyword( statement, "gtg" ) != 1 )
{
bot.respond( statement );
statement = input.nextLine();
}
System.out.println( "Goodbye!" );
}
}
最佳答案
1,请阅读substring
的javadoc。
Returns a new string that is a substring of this string. The substring begins at the specified beginIndex and extends to the character at index endIndex - 1
根据你的逻辑,你必须修改
String sub = statement.substring( position, position + keyword.length() + 1 );
至
String sub = statement.substring( position, position + keyword.length() + 2 );
2、由于您已经创建了Chatbot
实例,因此无需在Chatbot
中使用静态方法。
3、当您不再使用扫描仪
时,请记得将其关闭。
查看更新后的代码如下:
public class Chatbot {
public Chatbot( )
{
}
/*
* Generates a variety of responses, based on what the user has stated
*/
public void respond( String statement )
{
// use the findKeyword method to check for various cases of user statements
if( statement.length() == 0 )
{
System.out.println( "Please say something :)" );
}
else if( findKeyword( statement, "hi" ) > 0 ||
findKeyword( statement, "hello" ) > 0 ||
findKeyword( statement, "hey" ) > 0 ||
findKeyword( statement, "hiya" ) > 0 ||
findKeyword( statement, "heya" ) > 0 )
{
System.out.println( "Hello to you too!" );
}
else if( findKeyword( statement, "how are you" ) > 0 ||
findKeyword( statement, "hows it going" ) > 0 ||
findKeyword( statement, "howre you" ) > 0 ||
findKeyword( statement, "how ya doing" ) > 0 ||
findKeyword( statement, "yo wassup" ) > 0 ||
findKeyword( statement, "hey whats up" ) > 0 ||
findKeyword( statement, "whats up" ) > 0 )
{
System.out.println( "I'm good, how are you?" );
}
}
/*
* findKeyword method, returns either a 0 or a 1
* @ 0 -- keyword not found
* @ 1 -- keyword found
*/
public int findKeyword( String statement, String keyword )
{
// This is in case the keyword is not in the statement at all
if( !statement.contains( keyword ) )
{
return 0;
}
int position = statement.toLowerCase().indexOf( keyword.toLowerCase() ); // position of the keyword in the statement
statement = " " + statement.toLowerCase().replaceAll( "\'\",.?", "") + " "; // the purpose of this statement is to allow for us to search for specific phrases w/ spaces before and after the keyword
String sub = statement.substring( position, position + keyword.length() + 2 ); // isolates the keyword with 1 character before and after
String charBeforeKeyword = sub.substring( 0, 1 ); // the character before the keyword
String charAfterKeyword = sub.substring( sub.length() - 1, sub.length()); // the character after the keyword
/*
* Now, we check to see if the characters we isolated before are letters; if they are *
* @ If they are letters...then our keyword is part of a bigger word (e.g. if we searched for "success" and it brought us "successful"
* @ If they are not letters, then we have found our keyword with punctuation and/or spaces before/after it
*/
if( (charBeforeKeyword.compareTo( "a" ) < 0 || charBeforeKeyword.compareTo( "z" ) > 0 )
&& (charAfterKeyword.compareTo( "a" ) < 0 || charAfterKeyword.compareTo( "z" ) > 0 ))
{
return 1;
}
return 0;
}
}
还有执行
类。
import java.util.Scanner;
public class Execute
{
public static void main( String [] args )
{
// Variables and Objects
Chatbot bot = new Chatbot();
Scanner input = new Scanner( System.in );
String statement = "";
// Prompt and get the user's first input
System.out.println( "Type text to start chatting!" );
statement = input.nextLine();
// While the user doesn't say goodbye or some other form of it, respond to user and then get their next response
while( bot.findKeyword( statement, "bye" ) != 1 &&
bot.findKeyword( statement, "cya" ) != 1 &&
bot.findKeyword( statement, "goodbye" ) != 1 &&
bot.findKeyword( statement, "gtg" ) != 1 )
{
bot.respond( statement );
statement = input.nextLine();
}
input.close();
System.out.println( "Goodbye!" );
}
}
关于Java 聊天机器人——代码未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39302446/
我的对话 fragment 有问题。我想使用 android:onClick 属性,因为在我看来代码更清晰。 在我的布局中,我有以下声明: 现在我的 DialogFragment import an
我正在制作一个使用谷歌地图的应用程序,我的主要 xml 代码 fragment 如下: 我的java代码是: import android.os.Bundle; import com.googl
是否可以在一个应用程序中有两个单独的首选项?我有一个在运行时连接到外部可执行文件(引擎)的应用程序。应用程序有自己的偏好,引擎也有。这两者不能混用,因为下次用户可能会决定加载具有不同偏好的完全不同的引
这是“Google Catalogs”应用程序的快照。我只是想知道我们如何进行这种图像重叠。![enter image description here][1] 最佳答案 您可以使用 FrameLay
我制作了一个 GridView ,其中添加了图像。但我的问题是它显示的 gridview 尺寸非常小,其中只有 3 张图像,就像图片中那样,我想在其中显示 9 张图像。 小号 但我希望 gridvie
我目前正在学习如何在 Android 上创建和使用服务。我查看了 android SDK 以获得进一步的帮助,我发现了 android:enable=[true |假]。 在SDK中是这样说的: Th
在完成我的 Android 游戏时,我希望用户将他/她的分数与高分进行比较。为此,我将当前的最高分存储在 SQLite 数据库中。但我认为我的方法(似乎可行)笨拙且丑陋: //in the final
出于某种原因,谷歌没有为模拟器提供任何通知声音,我找不到任何关于如何加载通知声音的引用。 我遇到过这个线程:How to play ringtone/alarm sound in Android但是除
我的应用有以下样式: true #ffffff true 它在我使用的大多数手机上运行良好。 (LG G5、Nexus 5、Moto G)但是当我在 LeEco Pro
我想确保我的网站阻止 Selenium 和 QTP 等自动化工具。有没有办法做到这一点 ?网站上的哪些设置会导致 Selenium 失败? 最佳答案 适当考虑对原始问题“你到底为什么要这样做?”的评论
我正在处理我的联系表,我希望它尽可能地防止垃圾邮件。我正在使用一些方法作为反击: 使用 JavaScript 正则表达式验证电子邮件的合法性 验证所有字段是否具有足够的值 制作一个不可见的字段来吸引机
It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, over
我正在制作一个 android 应用程序,我需要在我的应用程序中显示远程图像我使用以下代码。但图像未显示: for(int i=0;i
我有几个与 Android 操作系统中的 AIML 集成相关的问题。我对 Java 了解不多,但我对 AIML 了解很多。我制作了 AIML 文件,现在我想做的是制作一个可以加载文件并在 GUI 中运
我有一个具有“登录”和“注销”操作的应用程序。用户登录后,在他们注销时堆栈中可能还剩下任意数量的 Activity 。 当用户注销时,我希望重置所有应用程序状态。我清除了我的磁盘缓存和首选项,但在运行
我是 Android 应用程序开发的新手,我正在尝试开发一个可用的应用程序。但是我创建的这个页面自创建以来就出现了问题,我真的希望有人能帮助我解决这个问题。每次我运行这个程序时,应用程序都会关闭。 这
我尝试将 android:imeOptions 设置为 actionSend、actionSearch。但是键盘上没有“发送”或“搜索”按钮,只有普通的“Enter”键。我还尝试设置不同的输入类型。
我想创建一种方法来查看相机坐标的中心是否在某个区域的边界内,如果是,则执行一些操作。 当我尝试这样做时,出现错误:Operator !不能应用于 LatLngBounds。 我也试过 if(temp
我正在尝试将视频录制时长限制为 5 秒。我正在使用默认相机和此代码: intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 5); 现在它在三星 S6 上工
我正在开发一款安卓游戏 https://code.google.com/p/something-soft/我的日志猫说它正试图激发游戏的 Intent ,但随后主线程似乎死了(出现 ActivityN
我是一名优秀的程序员,十分优秀!