2016-09-10 5 views
1

там. Мне нужна помощь. Я работаю над тем, чтобы пользователь вводил текст, менял текст, затем читал количество гласных в тексте и рассказывал, сколько гласных было в обратном тексте.Чтение # гласных из строки в java

public static void main(String[] args) 
{ 
System.out.println ("Please type in whatever you want "); 
Scanner type_input = new Scanner (System.in); 
Scanner type_input = new Scanner (System.in); 
StringBuilder type_output = new StringBuilder(); 
type_output.append(type_hold); 
type_output=type_output.reverse(); 
System.out.println("Is this what you types in? " + type_output); 

for(int vowel_num = 0; vowel_num< type_hold.length(); vowel_num++) 
    { 
     if((type_hold.charAt(vowel_num) =='a')||(type_hold.charAt(vowel_num) =='e')|| 
      (type_hold.charAt(vowel_num) =='o')||(type_hold.charAt(vowel_num) =='i')|| 
      (type_hold.charAt(vowel_num) =='u')){  

     System.out.println("There are " + vowel_num + " vowels in " + type_hold); 
    } 

Но когда я набираю его для запуска, я получаю следующее. Я не уверен, где я возился.

run: 
Please type in whatever you want 
hello 
Is this what you types in? olleh 
There are 1 vowels in hello 
There are 4 vowels in hello 

Редактировать: Я понял. Спасибо всем за помощь!

+7

Я держу пари, что число гласных в обратном тексте совпадает с количеством гласных звуков в оригинальном тексте ... – ajb

+0

@ajb У меня был хороший смех на это замечание. Однако я думаю, что у него просто есть две практические задачи - обратный текст и подсчет гласных. Я не думаю, что он пытался подсчитать их в оригинальном * и * обратном тексте. –

+2

Почему у вас есть строка 'type_input =' дважды? Другая проблема заключается в том, что taht 'vowel_num' не учитывает количество значений, а скорее дает их положение. –

ответ

3
  1. Что такое type_hold? Не видел, как вы его создаете, и вы используете его.
  2. vowel_num? Индекс, который вы перебираете через строку? или количество гласных, которое вы подсчитали?

Что вы должны сделать, чтобы рассчитывать гласные в строку:

Предполагая index является индексом строки мы в настоящее время сканирования, vowel_count является счетчиком гласные вы столкнулись.

int vowel_count = 0; 
for(int index = 0; index < type_hold.length(); index++) { 
    if((type_hold.charAt(index) =='a') || 
     (type_hold.charAt(index) =='e') || 
     (type_hold.charAt(index) =='o') || 
     (type_hold.charAt(index) =='i') || 
     (type_hold.charAt(index) =='u')){ 

     // character at vowel_index is a vowel. 
     // you have encountered 1 more vowel! 
     System.out.println("Character at " + index + " is a vowel."); 
     vowel_count ++; 
    } 
} 

System.out.println("There are " + vowel_count + " vowels in " + type_hold); 
+0

Я бы также предложил переименовать 'vowel_index' в' inputIndex' или что-то в этом роде, потому что это то, что есть. –

+0

Спасибо. глядя на ваш пример, я понимаю, где я возился. Тип _hold - это ранняя переменная, предназначенная для ввода ввода из переменной сканера new_input, поэтому я мог бы использовать ее в моей переменной StringBuilder type_output. Я уверен, что я мог бы сделать это лучше, но пока не знаю. Таким образом, vowel_index добавит значение к целому числу для каждого экземпляра гласного, который он видел, а затем для цикла добавит значение для vowel_num based oin? –

+0

жаль вас путать, когда я говорю, что vowel_index является индексом, я имею в виду, что это индекс для итерации по строке, поэтому в каждом цикле for он увеличивается, чтобы посмотреть на следующий символ в строке. –

-1

Изменен код; взглянуть;

public static void main(String[] args) 
{ 
    System.out.println ("Please type in whatever you want "); 
    Scanner type_input = new Scanner (System.in); 
    Scanner type_input = new Scanner (System.in); 
    StringBuilder type_output = new StringBuilder(); 
    type_output.append(type_hold); 
    type_output=type_output.reverse(); 
    System.out.println("Is this what you types in? " + type_output); 

    int count=0; 
    for(int vowel_num = 0; vowel_num< type_hold.length(); vowel_num++) 
    { 
    if((type_hold.charAt(vowel_num) =='a') ||(type_hold.charAt(vowel_num) =='e')|| 
     (type_hold.charAt(vowel_num) =='o')||(type_hold.charAt(vowel_num) =='i')|| 
     (type_hold.charAt(vowel_num) =='u')){  

    //System.out.println("There are " + vowel_num + " vowels in " + type_hold);      Instead of this 

    count++; 
    } 

System.out.println("There are " + count + " vowels in " + type_hold); 
} 

Это должно было сделать вашу работу.

+2

1. Не компилируется. // 2. Вы должны не только «исправить» код, но и объяснить, в чем дело, в первую очередь. –

3

Java 8 потоков можно использовать в массиве символов внутри строки.

StringBuilder type_hold = new StringBuilder(); 
long vowel_num = type_hold.toString().toLowerCase().chars() 
     .filter(it -> "aeiou".indexOf(it) != -1).count(); 
+0

Я предполагаю, что Стивен - новичок в программировании, просто изучая основы. IMHO Streams и Lambdas предназначены не для новичков. –

+1

Я бы использовал 'it ->" aeiou ".indexOf (it)> = 0';) +1 –

+0

@peter отлично, спасибо – Adam

Смежные вопросы