подсчет количества согласных в строке

Моя цель - подсчитать количество согласных ТОЛЬКО в строке, и это мой код:

import java.io.*;
/**
 * Write a description of class Program46 here.
 *
 * @author (your name)
 * @version (a version number or a date)
 */
public class Program46
{
    public static void main()throws IOException
    {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter phrase: ");
        String phrase=br.readLine();
        int lth=phrase.length();
        int ctr=0;
        for(int i=0;i<=lth-1;i++)
        {
            char a=phrase.charAt(i);
            boolean chk=Character.isDigit(a);
            if(a!='a'&&a!='e'&&a!='i'&&a=='o'&&a!='u'&&a!=' '&& chk==false)
                ctr++;

        }
        System.out.println("No. of consonents: "+ctr);
    }
}

Программа компилируется, не показывая синтаксической ошибки. Однако, когда я выполняю это в void main(), независимо от того, что я ввожу, количество подсчитываемых согласных всегда равно 0. Есть ли ошибка в моей программе? Если это так, я прошу вас предложить лучший способ сделать это или способ исправить приведенный выше код.


person ineedhelpinlogic    schedule 08.08.2015    source источник
comment
Исправьте это, и код будет работать: &&a=='o' должно быть &&a!='o'. Я голосую за закрытие как опечатку. Подумайте об удалении вопроса, если это решит вашу проблему.   -  person Sergey Kalinichenko    schedule 08.08.2015


Ответы (2)


В вашем коде неправильные две вещи:

  1. У вас опечатка при проверке гласной «о». Вместо a == 'o' должно быть a != 'o'
  2. Даже если вы исправите это, ваша проверка будет учитывать только гласные в СТРОЧНОМ РЕГИСТРЕ, пробел и цифры. Если проверяемый символ не является ни одним из них, то он будет считаться согласным. Сюда входят гласные в ЗАГЛАВНОМ РЕГИСТРЕ, специальные символы (!@#$ и т. д.), другие пробелы ('\t') и знаки препинания.

Исправления могут быть примерно такими:

public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Enter phrase: ");
    String phrase = br.readLine();
    int lth = phrase.length();
    int ctr = 0;
    for (int i = 0; i <= lth - 1; i++) {
        char ch = phrase.charAt(i);
        // Skip this character if it's not a letter
        if (!Character.isLetter(ch)) {
            continue;
        }

        if (ch != 'a' && ch != 'e' && ch != 'i' && ch != 'o' && ch != 'u' &&
            ch != 'A' && ch != 'E' && ch != 'I' && ch != 'O' && ch != 'U' ) {
            ctr++;
        }
    }
    System.out.println("No. of consonents: " + ctr);
}

Достигнув этой точки, вы можете искать способы «улучшения» кода.

person Shar1er80    schedule 08.08.2015

Вы случайно проверяете, что текущий символ является 'o' (a=='o'), вместо проверки того, что он не является (a != 'o').

Исправьте это, и вы должны быть в порядке.

Кстати, обратите внимание, что правильная подпись метода main в Java — public static void main(String[] args).

person Mureinik    schedule 08.08.2015
comment
возможный дубликат: stackoverflow.com/questions/25262270/ . пожалуйста, перейдите по этой ссылке, вы получите лучшее решение. Спасибо - person Anand Dwivedi; 08.08.2015
comment
@Mureinik Это альтернатива тому, что я использую. Однако работает так же. - person ineedhelpinlogic; 13.08.2015