#java
#java
Вопрос:
У меня есть задание, в котором моя программа выводит простую строку, используя условия if другой строки, но я продолжаю сталкиваться с проблемой, когда я не могу создать новый экземпляр (я думаю, что это так называется)
в любом случае, вот мой код
import java.util.Scanner;
public class EP54
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.print("Do you want to continue? ");
**yesNoChecker check1 = new yesNoChecker();**
System.out.print(EP54.yesNoChecker);
}
public String yesNoChecker()
{
if(in.equalsIgnoreCase("y") ||
in.equalsIgnoreCase("yes") ||
in.equalsIgnoreCase("Sure") ||
in.equalsIgnoreCase("why not"))
System.out.println("OK");
else if(in.equalsIgnoreCase("y") ||
in.equalsIgnoreCase("yes") ||
in.equalsIgnoreCase("Sure") ||
in.equalsIgnoreCase("why not"))
System.out.println("Terminating.");
else
System.out.println("Bad Input");
}
}
Пожалуйста, помогите мне! (выделенная жирным шрифтом часть — это место, где я получаю сообщение об ошибке)
Кто-нибудь может дать мне рабочую версию кода, чтобы я мог сравнить ее со своей?
Комментарии:
1. yesNoChecker() — это метод, вы не можете создать его экземпляр.
2. Хорошо, я изменил свой код на это: pastie.org/2796683
3. В строке 10 я получаю сообщение об ошибке «нестатический метод yesNoChecker(java.util. Сканер) нельзя ссылаться на статическое содержимое»
4. Я отредактировал свой код следующим образом: pastie.org/2796907
5. Я сейчас в таком замешательстве. Кто-нибудь может объяснить мне всю глубину?
Ответ №1:
import java.util.Scanner;
public class EP54
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.print("Do you want to continue? ");
String answer = in.next();
yesNoChecker(answer);
}
public static void yesNoChecker(String in)
{
if(in.equalsIgnoreCase("y") ||
in.equalsIgnoreCase("yes") ||
in.equalsIgnoreCase("Sure") ||
in.equalsIgnoreCase("why not"))
System.out.println("OK");
else if(in.equalsIgnoreCase("n") ||
in.equalsIgnoreCase("no") ||
in.equalsIgnoreCase("nope") ||
in.equalsIgnoreCase("quit"))
System.out.println("Terminating.");
else
System.out.println("Bad Input");;
}
}
Понял
Ответ №2:
yesNoChecker()
это функция, а не объект. В этом случае вы захотите вызвать yesNoChecker()
(также известный как «вызов метода»), а не создать экземпляр yesNoChecker
(также известный как «создание объекта»). Вместо этого ваш код должен выглядеть примерно так:
import java.util.Scanner;
public class EP54
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.print("Do you want to continue? ");
yesNoChecker();
System.out.print(EP54.yesNoChecker);
}
public String yesNoChecker()
{
// (omitted for brevity)
}
}
Вы создаете экземпляры новых объектов типа класса. Например, Scanner
это класс, который вы использовали здесь, который предоставляет вам Java. Когда вы говорите new Scanner()
, вы создаете новый экземпляр Scanner
класса.
Комментарии:
1. Не забудьте вернуть строку!
2. EP54.yesNoChecker по-прежнему является методом (и не статическим). Я думаю, вы можете удалить вызов метода до завершения работы системы и просто изменить sys out на yesNoChecker() . Кстати, если это задание, разве оно не должно быть помечено как домашнее задание?
Ответ №3:
yesNoChecker — это метод, а не класс — вы не можете создать его экземпляр.
Вы можете вызвать его:
yesNoChecker();
Однако он определен для возврата строки, чего он в настоящее время не делает. Возможно, вы захотите вернуть строку, которую вы сейчас печатаете.
Ответ №4:
Вам также необходимо получить фактический ввод от класса user / Scanner.
Что-то вроде:
String s = in.nextLine();
Затем вы сравниваете строку s с тем, что вам нужно («Y», «yes» и т. Д.)
Надеюсь, это поможет!
p.s. Ваша функция делает это, но подумайте, вводит ли кто-то цифру, а не букву или произведение. Всегда рекомендуется проверять входные данные перед их использованием.