我是Java新手,我正在尝试制作聊天机器人。我有一个主方法然后一个方法与响应。虽然当我尝试在main方法中调用响应方法时,它会突出显示单词Response并说:方法ChatCode中的方法响应不能应用于给定的类型; required:java.lang.String;发现:没有争论;原因:实际和正式的参数列表长度不同
public class ChatCode{
public static String main(String input){
Scanner sc = new Scanner(System.in);
System.out.println("Hello!");
input = sc.nextLine();
while(input != ("Bye")){
Response();
}
System.out.println("Bye!");
}
然后这是我的回应方法
public static String Response(String output){
Scanner sc = new Scanner(System.in);
input = input.toLowerCase();
input = input.trim();
String output;
if(input.indexOf("hi!") >= 0
|| ("hi") >= 0
|| ("hello!") >= 0
|| ("hello") >= 0){
output = "Hello!";
}
else if(input.indexOf("whats up?") >= 0
|| ("what's up?") >= 0
|| ("whats up") >= 0
|| ("what's up") >= 0){
output = "Nothing much, how about you?";
}
else if(input.indexOf("how are you?") >= 0
|| ("how are you") >= 0){
output = "I am great, how about you?";
}
return output;
}
任何反馈都将不胜感激!!!!
答案 0 :(得分:1)
Response(String output)
方法接受一个参数,并且您没有向此方法传递任何参数,对此方法的有效调用是Response("stringValue");
而不是Response();
。
此外,正如(Pshemo
)input != ("Bye")
的评论中所述,将比较String
的参考而非价值。您应该使用"Bye".equals(input)
或"Bye".equalsIgnoreCase(input)
来检查输入。
答案 1 :(得分:1)
您声明Response()
方法需要一个String
类型的参数。这意味着在编写时,您需要在调用它时将其传递一个String
。这就是编译器告诉你的:它强制执行你在编写方法时指定的要求。它没有非常有效地进行通信(编译器是不明确的野兽),但现在你知道这个消息意味着什么了。
由于你从不在函数内部使用参数(而是使用同名的局部变量),只需从函数定义中删除它,然后你就可以调用Response()
了。参数。
我希望你仔细阅读所有的答案;您的代码还有一些其他问题。
答案 2 :(得分:1)
您的计划中有许多不正确的事情
1. while(input != ("Bye")){
要比较2个字符串对象,请使用equals()方法而不是使用!=。
while(!("Bye").equals(input)){
2.您还应该在Response(字符串输出)方法中收到编译错误,因为您还在方法内创建了同名的变量。
3. if(input.indexOf("hi!") >= 0
|| ("hi") >= 0
|| ("hello!") >= 0
|| ("hello") >= 0){
output = "Hello!";
}
我假设你写了'input.indexOf(“hi”)> = 0'而不只是'(“hi”)> = 0'。
4.查看代码,我认为您不需要在Response方法中将String输出作为参数传递。只需删除此参数,并添加一个else块,该块将为输出变量设置默认值。
答案 3 :(得分:0)
那是因为您声明了Response方法如下
public static String Response(String output){...}
当你调用它时,你需要遵循传递参数的格式。参数类型必须是“String”。
Response(passAnyStringYouWantHere);