为什么我不能在程序中调用此方法?

时间:2015-12-18 03:04:27

标签: java string methods

我是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;
}

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

4 个答案:

答案 0 :(得分:1)

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

此外,正如(Pshemoinput != ("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);