2015-12-18 2 views
0

Я очень новичок в Java, и я пытаюсь сделать чат-бот. У меня есть основной метод, а затем метод с ответами. Хотя, когда я пытаюсь вызвать метод ответа в основном методе, он выделяет слово Response и говорит: метод Response в классе ChatCode не может применяться к заданным типам; требуется: 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.ком/вопросы/513832 /, как-ду-я-сравнить-стринг-в-Java); (1) 'Response (String output) {' ожидает аргумент, поэтому вы не можете вызывать его без ответа через 'Response()'; (2) имена методов должны начинаться с нижнего регистра. – Pshemo

+0

Ваш метод 'public static String Response (String output) {' объявлен как требующий аргумент 'String', но вы используете' Response(); ', что не то же самое, вы должны передать ему' null 'или значение' String' – MadProgrammer

+0

необходимо передать здесь String, тогда как (input! = («Bye»)) { Response(); // Нравится это -> Response (input); } –

ответ

1

метод принимает один аргумент, и вы не передаете какой-либо аргумент этому методу, действительный вызов этого метода - 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' вместо просто '("hi")> = 0'.
4. Глядя на код, я не думаю, что вам нужно передать вывод String в качестве аргумента в методе Response. Просто удалите этот аргумент и добавьте блок else, который установит значение по умолчанию для выходной переменной.

0

Это потому, что вы объявили метод ответа следующего

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

Когда вы звоните, вы должны следовать формату с пропусканием аргумента. Тип аргумента должен быть «String».

Response(passAnyStringYouWantHere); 
Смежные вопросы