//: testing/EnglishTesting.java package testing; import connection.*; import java.util.ArrayList; import java.text.NumberFormat; /** * EnglishTesting - class for testing of knowledge English language * @version 1.0 * @author Shpatserman Maria */ public class EnglishTesting { /** skill - count of correct answers*/ Integer skill; /** errors - count of improper answers*/ Integer errors; /** countQuests - count of all questions*/ Integer countQuests; /** improperAnswers - long description of an improper answers*/ String improperAnswers; /** * In constructor we setup default settings */ public EnglishTesting(){ skill = 0; errors = 0; countQuests = 0; improperAnswers = new String(); } /** Method gets a random english word * @return random english word */ public String getEngWord(DataConnection data){ String englishWord; englishWord = data.returnRandomWord(); return englishWord; } /** Method returns true if params englishWord and russianWord are matched * @param englishWord testing word * @param russianWord check answer * */ boolean checkAnswer(String englishWord, String russianWord,DataConnection data){ // System.out.println("checkAnswer"); ArrayList answersList = data.returnAnswersByWord(englishWord); return answersList.contains(russianWord); } /** * Method returns string with number of the question * @param englishWord question * @param russianWord obtained word * @param questionNumber question number * @param data connection to DB * @return */ String generateAnswerForImproperWord(String englishWord, String russianWord, Integer questionNumber,DataConnection data){ //System.out.println("generateAnswerForImproperWord"); String answer = new String(); answer = "Неправильный ответ на вопрос № "+questionNumber+"\n"; answer = answer +"Слово "+ englishWord+"\n"; answer = answer +"Ваш ответ "+ russianWord+"\n"; answer = answer +"Правильный ответ "+ data.returnAnswersByWord(englishWord); return answer; } /** * Iterator for errors and skills * @param englishWord question * @param russianWord obtained word * @param questionNumber question number * @param data connection to DB */ public void calcSkill(String englishWord, String russianWord, Integer questionNumber,DataConnection data){ countQuests++; if (checkAnswer(englishWord,russianWord,data)) { skill++; } else { errors++; improperAnswers = improperAnswers + generateAnswerForImproperWord(englishWord,russianWord,questionNumber,data)+"\n"; } } /** * Method returns percent of correct answers like 100% * @return */ String calcPercent(){ if (countQuests>0){ double percent = skill.doubleValue()/countQuests.doubleValue(); NumberFormat percentFormat = NumberFormat.getPercentInstance(); percentFormat.setMaximumFractionDigits(1); String result = percentFormat.format(percent); return result; } else { return "100%"; } } /** Method returns results of the testing * * @return Long string with Count of correct Answers, Incorrect answers etc. */ public String getResults(){ if (errors == 0){ return "Великолепно! "+"\n"+"Результат "+calcPercent()+"\n"+"Правильных ответов "+skill + " из "+countQuests; } else { String answer = new String(); answer = "Результат "+calcPercent()+"\n"+"Правильных ответов "+skill + " из "+countQuests+"\n"+"Ошибок "+errors+"\n"+improperAnswers; return answer; } } }