2014-09-24 1 views
-1

Я пишу программу, которая должна рассчитать индекс Flesch прохода или строки и указать минимальный уровень образования, необходимый для понимания.Проблемы с индексами Flesch (Java)

Предполагается, что человек должен вводить строку, которую нужно вычислить, и программа должна посчитать количество слов и подсчитать количество предложений, а также пройти каждое слово и рассчитать, сколько слогов в слове и добавить это к счетчику общего слога. Способ вычисления слоги состоит в том, чтобы подсчитать количество смежных гласных в слове, так что «Компьютер», например, имеет гласные o, u и e, поэтому 3 слога. Но, если слово заканчивается буквой e, вычитайте 1 из общего количества слогов, поэтому «Прохождение» имеет a, a и e, но так как e находится в конце, количество слогов равно 2.

Вот то, что я до сих пор:

// Import scanner to get input from the user 
import java.util.Scanner; 

public class Flesch 
{ 
    public static void main (String [] args) 
    { 
    public static final double BASE = 206.835; 
    public static final double WORD_LENGTH_PENALTY = 84.6; 
    public static final double SENTENCE_LENGTH_PENALTY = 1.015; 

    Scanner input = new Scanner (System.in); 

    // Declare variables for syllables and words 
    int totalWords = 0; 
    int totalSyllables = 0; 

    // Prompt user for a passage of text 
    System.out.println ("Please enter some text:"); 
    String passage = input.nextLine(); 

    // Words 
    for (int i = 0; i < passage.length(); i++) 
    { 
     if (passage.charAt(i) == ' ') { 
     totalWords++; 
     } 
     else if (passage.charAt(i) == '.') { 
     totalWords++; 
     } 
     else if (passage.charAt(i) == ':') { 
     totalWords++; 
     } 
     else if (passage.charAt(i) == ';') { 
     totalWords++; 
     } 
     else if (passage.charAt(i) == '?') { 
     totalWords++; 
     } 
     else if (passage.charAt(i) == '!') { 
     totalWords++; 
     } 
    } 



    System.out.println ("There are " + totalWords + " words."); 

    char syllableList [] = {'a', 'e', 'i', 'o', 'u', 'y'}; 

    // Syllables 
    for (int k = 0; k < syllableList.length; k++) 
    { 
     for (int i = 0; i < passage.length(); i++) 
     { 
     if (passage.charAt(i) == syllableList[k]) { 
      totalSyllables = totalSyllables + 1; 
     } 
     if (lastChar(passage) == 'E' || lastChar(passage) == 'e') { 
      totalSyllables = totalSyllables - 1; 
     } else { 
      break; 
     } 
     } 
    }  
    System.out.println ("There are " + totalSyllables + " syllables."); 
    input.close(); 

    public static char lastChar (String aWord) 
    { 
     char aChar = aWord.charAt(aWord.length() - 2); 
     System.out.print (aChar); 
     return aChar; 
    } 

    /** Return true if the last character in the parameter word is 
     * a period, question mark, or exclaimation point, and false 
     * otherwise 
     **/ 
    public static boolean sentenceEnd (String word) 
    { 
     if (lastChar(passage) == '.') { 
     return true; 
     } else if (lastChar(passage) == '?') { 
     return true; 
     } else if (lastChar(passage) == '!') { 
     return true; 
     } else { 
     return false; 
     } 
    } 

    double fleschIndex = BASE - WORD_LENGTH_PENALTY * (totalSyllables/totalWords) - SENTENCE_LENGTH_PENALTY * (totalWords/totalSentences); 

    if (fleschIndex > 100) { 
     educationLevel = "4th grader"; 
    } else if (fleschIndex <= 100) { 
     educationLevel = "5th grader"; 
    } else if (fleschIndex <= 90) { 
     educationLevel = "6th grader"; 
    } else if (fleschIndex <= 80) { 
     educationLevel = "7th grader"; 
    } else if (fleschIndex <= 70) { 
     educationLevel = "8th grader"; 
    } else if (fleschIndex <= 60) { 
     educationLevel = "9th grader"; 
    } else if (fleschIndex <= 50) { 
     educationLevel = "high school graduate"; 
    } else if (fleschIndex <= 30) { 
     educationLevel = "college graduate"; 
    } else if (fleschIndex < 0) { 
     educationLevel = "law school graduate"; 
    } 

    System.out.println ("The Flesch idex is " + fleschIndex + "."); 
    System.out.println ("The text can be understood by a " + educationLevel + "."); 
    } 
} 

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

+0

Видимо, вы не знакомы с базовым синтаксисом Java. И «базовым» я действительно имею в виду базовый. Возьмите книгу о типах «Написание вашей первой программы Java», поскольку кто-то, исправляющий ошибки, которые у вас здесь, бесполезен как для сайта, так и для вас. – Ordous

+0

Возможный дубликат [Flesch Index program Java] (http://stackoverflow.com/questions/25984531/flesch-index-program-java) –

+0

Может ли модератор удалить этот вопрос? – vissu

ответ

0

Мне кажется, что вы перепутали свои методы.

Методы предложенияEnd и lastChar находятся внутри основного метода. Это запрещено. Они должны быть вне основного метода, но внутри Flesch-Class.