Подсчет слогов, проблема цикла - PullRequest
1 голос
/ 21 октября 2011

Я пытаюсь сосчитать слоги, и сейчас я провожу тест, чтобы выяснить, могу ли я найти гласные, а затем перейти оттуда. Тем не менее, мои выходные данные равны 0, и я не вижу, где ошибка.

import java.util.*;
import java.io.*;

public class Word{

    private char[] letters;
    private char[] vowels;
    private int ct;
    private int temp;
    private int syllableCt;
    private int iftest;

    public Word(String[] words){
        temp = 0;
        ct = 0;
        for (int i = 0;i<words.length;i++){

            temp = countSyllables(words[i]);

        }

    }

    public int countSyllables(String str){

        char[] letters = str.toCharArray();
        syllableCt = 0;
        for (int i = 0; i<letters.length;i++){
            if (isVowel(letters[i]))
                syllableCt++;




            System.out.println("" + letters[i] + "\n");
            System.out.println("" + syllableCt + "\n");



        }
        return syllableCt;
    }
    public boolean isVowel(char ch){

        int iftest = 0;
        char[] vowels = { 'a', 'e', 'i', 'o', 'u', 'y','A','E','I','O','U','Y'};
        for (int i = 0;i<vowels.length;i++){
            if (ch == i)
                iftest = 1;

        }
        if (iftest == 1)
            return true;
        else
            return false;
    }

    public static void main(String args[]){
        String[] words;
        words = new String[5];
        words[0] = "dog";
        words[1] = "moon";
        words[2] = "syllables";
        words[3] = "reddit";
        words[4] = "3749832";
        Word word = new Word(words);
        System.exit(0);
    }
}

Ответы [ 5 ]

2 голосов
/ 21 октября 2011

Похоже, что в методе проверки гласной ошибки есть ошибка

if (ch == i)
          iftest = 1;

Чек должен быть ch == гласными [i]. Кроме того, метод и класс могут быть значительно реорганизованы, здесь ничего не поделаешь, так как сейчас у меня нет доступа к компьютеру.

Проверьте, работает ли приведенный ниже метод:

public boolean isVowel(char ch){

  int iftest = 0;
  char[] vowels = { 'a', 'e', 'i', 'o', 'u', 'y','A','E','I','O','U','Y'};
  for (int i = 0;i<vowels.length;i++){
      if (ch == vowels[i])
          return true;

  }
  
      return false;
}
0 голосов
/ 21 октября 2011

строка:

if (ch == i)

сравнивает символ с индексом цикла, вы, вероятно, имели в виду:

if (ch == vowels[i])

вместо управления флагом с именем iftest вы можете вернуть true, когдавы находите гласный непосредственно, как в (псевдокоде):

loop over vowels {
    if character == vowel
        return true
}
return false

плюс вы, вероятно, не хотите сбрасывать syllableCt в 0 каждый вызов countSyllables().

0 голосов
/ 21 октября 2011

В isVowel вы сравниваете букву с i. Вы должны сравнить это с vowels[i].

0 голосов
/ 21 октября 2011

Посмотрите на назначение 'temp' в вашем цикле.Если вы хотите вычислить общее количество слогов во всех словах, вы хотите накапливать число в temp следующим образом: temp + = countSyllables ... Если вы хотите отдельный счетчик для каждого слова, вы хотите, чтобы temp был массивом, изаполните это в своем цикле.

Сейчас вы видите только последний слог, который является правильным, если учесть, что в последнем слове нет гласных.

0 голосов
/ 21 октября 2011

вместо if (ch == i)

, который вы хотите

if(ch == vowels[i])

в вашем методе isVowel ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...