Скриншот моего вопроса, на который я отвечаю
Я столкнулся с этой проблемой с моим методом переключения, где метод, у которого есть этот переключатель, должен быть сделан статический. Он запускается, когда я удаляю статический из метода Main, ошибок нет, пока я не запускаю его, чего не могу.
Это мой файл кода, я не знаю, почему он работает с ошибками таким образом, я абсолютно застрял в том, что происходит.
public static void main(String[] args) {
String sentence = "CsprdkoPurln dhVqq f gul col r jcwk ujd";
System.out.println(howManyVowels(sentence));
}
public String howManyVowels(String sentence) {
String userString;
int a=0, e=0, i=0, o=0, u=0, other=0;
char vowels;
Scanner scan = new Scanner (System.in);
userString = scan.nextLine();
for (int count=0; count < userString.length(); count++)
{
vowels = userString.charAt(count);
switch (vowels) {
case 'a' -> a++;
case 'e' -> e++;
case 'i' -> i++;
case 'o' -> o++;
case 'u' -> u++;
default -> other++;
}
}
return ("Number of each lowercase vowel in the string: \n") + ("a: " + a) + ("\n" + "e: " + e) + ("\n"+"i: " + i) + ("\n"+"o: " + o) + ("\n"+"u: " + u) + ("\n"+"other " + other);
}
}
Ошибка, с которой я столкнулся, просто не в состоянии выполнить код. Я честно не знаю, что с ним не так.
Программа, через которую он проходит, по-видимому, использует старый метод переключения. О чем я не слышал, поскольку то, что я написал, - это все, что я знаю о том, как выглядит переключатель. Первоначально я отформатировал его как,
switch (vowels)
{
case 'a':
a++;
break;
case 'e':
e++;
break;
case 'i':
i++;
break;
case 'o':
o++;
break;
case 'u':
u++;
break;
default:
other++;
}
Который я не мог запустить, если только метод Main не был статическим, или я не сделал статическим howManyVowels, которого не было в критериях вопроса, таким образом получив ответ с ошибкой + ошибкой.
Не проблема в, но выражение switch
не должно быть заменой 1: 1 для «старого» оператора switch
. Если вас интересуют только побочные эффекты, а не результат выражения, вам следует использовать классический оператор switch
.
По сути, main
должен быть статическим, и любые методы, которым не требуется инициализация объекта, будут static
. Возможно ли вообще с помощью вашего теста инициализировать объект, а затем вызывать howManyVowels
?
howManyVowels
должен быть static
, в первую очередь.
@tquadrat с учетом назначения (т. е. для написания кода внутри метода) похоже, что howManyVowels
следует оставить нестатичным.
@FedericoklezCulloca — main()
является статическим, нет вызова конструктора для класса, содержащего как main()
, так и howManyVowels()
, а последний вызывается из первого — поэтому howManyVowels()
должен быть статическим…
@tquadrat или, как указал Алиикс, вы можете создать экземпляр любого класса, в котором находится этот код, и вызвать howManyVowels()
для этого экземпляра, поэтому, если предположить, что содержимое main
может быть изменено, howManyVowels()
не делает необходимость статичным. Проблема в том, что оба подхода могут быть правильными, но в вопросе/задании недостаточно контекста для принятия решения.
@tquadrat На самом деле у меня сложилось впечатление, что OP тестирует этот код за пределами страницы задания (т.е. локально на своей машине или другом компиляторе) и предположил, что они могут скопировать и вставить код примера, в то время как настоящийmain
задание фактически создает экземпляр класс
Я вижу, что вы не используете параметр «предложение» функции «howManyVowels», вместо этого вы просите пользователя ввести предложение:
вот как можно это исправить:
public static void main(String[] args) {
String sentence = "CsprdkoPurln dhVqq f gul col r jcwk ujd";
System.out.println(howManyVowels(sentence));
}
public static String howManyVowels(String sentence) {
int a=0, e=0, i=0, o=0, u=0, other=0;
char vowels;
for (int count=0; count < sentence.length(); count++)
{
vowels = sentence.charAt(count);
switch (vowels)
{
case 'a':
a++;
break;
case 'e':
e++;
break;
case 'i':
i++;
break;
case 'o':
o++;
break;
case 'u':
u++;
break;
default:
other++;
}
}
String str = ("Number of each lowercase vowel in the string: \n") +
("a: " + a) + ("\n" + "e: " + e) + ("\n"+"i: " + i) +
("\n"+"o: " + o) + ("\n"+"u: " + u) +
("\n"+"other " + other);
return str;
}
если вам не нужен статический контекст, вы можете создать другой класс, назовите его Calcul, который содержит метод «howManyVowels», и вызовите его в основном классе, как показано ниже:
public static void main(String[] args) {
String sentence = "CsprdkoPurln dhVqq f gul col r jcwk ujd";
Calcul.howManyVowels(sentence);
}