Метод переключения не работает

Скриншот моего вопроса, на который я отвечаю

Я столкнулся с этой проблемой с моим методом переключения, где метод, у которого есть этот переключатель, должен быть сделан статический. Он запускается, когда я удаляю статический из метода 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, которого не было в критериях вопроса, таким образом получив ответ с ошибкой + ошибкой.

JavaScript или Java?
evolutionxbox 17.05.2022 09:06

Не проблема в, но выражение switch не должно быть заменой 1: 1 для «старого» оператора switch. Если вас интересуют только побочные эффекты, а не результат выражения, вам следует использовать классический оператор switch.

Federico klez Culloca 17.05.2022 09:13

По сути, main должен быть статическим, и любые методы, которым не требуется инициализация объекта, будут static. Возможно ли вообще с помощью вашего теста инициализировать объект, а затем вызывать howManyVowels?

Aliics 17.05.2022 09:13
howManyVowels должен быть static, в первую очередь.
tquadrat 17.05.2022 09:18

@tquadrat с учетом назначения (т. е. для написания кода внутри метода) похоже, что howManyVowels следует оставить нестатичным.

Federico klez Culloca 17.05.2022 09:20

@FedericoklezCulloca — main() является статическим, нет вызова конструктора для класса, содержащего как main(), так и howManyVowels(), а последний вызывается из первого — поэтому howManyVowels() должен быть статическим…

tquadrat 17.05.2022 09:24

@tquadrat или, как указал Алиикс, вы можете создать экземпляр любого класса, в котором находится этот код, и вызвать howManyVowels() для этого экземпляра, поэтому, если предположить, что содержимое main может быть изменено, howManyVowels() не делает необходимость статичным. Проблема в том, что оба подхода могут быть правильными, но в вопросе/задании недостаточно контекста для принятия решения.

Federico klez Culloca 17.05.2022 09:28

@tquadrat На самом деле у меня сложилось впечатление, что OP тестирует этот код за пределами страницы задания (т.е. локально на своей машине или другом компиляторе) и предположил, что они могут скопировать и вставить код примера, в то время как настоящийmain задание фактически создает экземпляр класс

Federico klez Culloca 17.05.2022 09:29
Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
0
8
32
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я вижу, что вы не используете параметр «предложение» функции «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);
   
}  

Другие вопросы по теме