2015-12-18 52 views
0

我对Java很新,我正在尝试创建一个聊天机器人。我有一个主要方法,然后有一个响应的方法。尽管当我尝试在主要方法中调用响应方法时,它突出显示了单词Response并说:方法ChatCode中的Response不能应用于给定的类型; 必需: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; 
} 

任何反馈,将不胜感激!!!!

+1

(0)'input!=(“Bye”)' - > [如何比较Java中的字符串?](http:// stackoverflow。COM /问题/ 513832 /怎么办 - 我 - 比较 - 字符串,在Java的); (1)'Response(String output){'期望参数,所以你不能通过'Response()'调用它; (2)方法名称应以小写开头。 – Pshemo

+0

您的方法'public static String Response(String output){'被声明为需要'String'参数,但是您使用'Response();',这不是同一件事情,您必须将它传递给'null '或者'String'值 – MadProgrammer

+0

需要在这里传递一个字符串,while(input!=(“Bye”)){Response; //像这样 - > Response(input); } –

回答

1

Response(String output)方法只带一个参数,并且您没有将任何参数传递给此方法,对此方法的有效调用是Response("stringValue");而不是Response();

此外,如已在(Pshemo)的评论中所述,input != ("Bye")将比较参考String而不是值。您应该使用"Bye".equals(input)"Bye".equalsIgnoreCase(input)来检查输入。

1

您声明Response()方法需要String类型的单个参数。这意味着,在写入时,您需要在调用它时传递一个String。这就是编译器告诉你的:它执行你在编写方法时指定的要求。它不是非常有效地交流(编译器是不明智的野兽),但现在你知道那个消息的含义。

由于您从不在函数内部使用参数(而是使用同名的局部变量),只需从函数定义中删除它,然后您就可以很好地调用Response()而不带参数。

我希望你会仔细阅读所有的答案;你的代码还有其他一些问题。

1

程序中有很多不正确的东西。
1. while(input != ("Bye")){
要比较2个字符串对象,请使用equals()方法而不是使用!=。
while(!("Bye").equals(input)){
2.您还应该在Response(String output)方法中收到编译错误,因为您还在方法内部创建了一个名称相同的变量。
3. if(input.indexOf("hi!") >= 0 || ("hi") >= 0 || ("hello!") >= 0 || ("hello") >= 0){ output = "Hello!"; }
我假设你写了'input.indexOf(“hi”)> = 0'而不是'(“嗨”)> = 0'。
4.看看代码,我不认为你需要在Response方法中传递String输出作为参数。只要删除这个参数并添加一个else块,它将为输出变量设置一个默认值。

0

那是因为你声明的响应方法如下

public static String Response(String output){...} 

当你调用它,你需要按照格式传递参数。参数类型需要是“String”。

Response(passAnyStringYouWantHere); 
相关问题