Сколько попыток понадобится сделать компьютеру чтобы подобрать из рандомных букв слово которое вы ввели?
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
StringBuilder stringBuilder = new StringBuilder(); // будет формировать новое слово из рандомных букв
Random random = new Random(); // великий псевдорандом
String myWord = reader.readLine(); // ваше слово
int wordLenght = myWord.length(); // количество символов в вашем слове
int counterOfMyShances = 0; // счётчик попыток
char[] alphabetArr = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'g', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'G', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
do { // выполняем процесс формирования слова в цикле
for (int i = 0; i < wordLenght; i++) {
int randomlLeter = random.nextInt(alphabetArr.length); // извлекаем случайную букву
stringBuilder.append(alphabetArr[randomlLeter]); // формируем строку из букв
counterOfMyShances ++;
}
}while (myWord.equals(stringBuilder)); //всё вышеперечисленное выполняем до тех пор пока введённое и сгенерированное слова совпадут
System.out.println(counterOfMyShances );
Цикл "do while" выполняет блок "do" далее сравнивает результат с блоком "while" и если второй блок не отвечает "Да, это try" начинает процесс с начала. Так? Мой код генерирует слово длиной строго равной длине введённого слова и дальше завершает процесс несмотря на то что слова не совпадают. Что я упустил? скажите пожалуйста.
public class Test {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
StringBuilder stringBuilder;// будет формировать новое слово из рандомных букв
Random random = new Random(); // великий псевдорандом
String myWord = reader.readLine(); // ваше слово
int counterOfMyShances = 0; // счётчик попыток
char[] alphabetArr = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'g', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'G', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
do { // выполняем процесс формирования слова в цикле
stringBuilder = new StringBuilder();
for (int i = 0; i < myWord.length(); i++) {
int randomlLeter = random.nextInt(alphabetArr.length); // извлекаем случайную букву
stringBuilder.append(alphabetArr[randomlLeter]); // формируем строку из букв
counterOfMyShances++;
}
} while (!myWord.equals(stringBuilder.toString())); //всё вышеперечисленное выполняем до тех пор пока введённое и сгенерированное слова совпадут
System.out.println(counterOfMyShances);
}
}
Относительно ошибок приводящие к некорректной работе алгоритма вам уже ответили, но я бы хотел обратить ваше внимание на крайнюю не оптимальность самого алгоритма.
Зачем в сравнении участвует регистр в момент поиска набора букв? Даже для ужесточения совпадения почему не применить разность регистров уже на этапе когда само слово совпадает и уже в рамках много меньшего кол-ва комбинаций подбирать регистр?
Если даже отбросить сам факт что заглавные буквы употребляются в именах только в начале имени, и допустить ее существование в разных позициях имени, все равно такая маленькая поправка в алгоритме сузит кол-во возможных комбинаций в поиске нужного имени, мягко говоря, существенно.
Ваш цикл выполняется столько раз, сколько раз два слова равны плюс один. Т.е. именно один раз. Нужно сравнивать не на равенство, а на неравенство.
while (!myWord.equals(stringBuilder))
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Не совсем понимаю как можно полностью вытащить изображение по url с помощью SpringУ меня простой REST контроллер post
Мой кастомный Spinner при первом клике на него долго открывается (~3 сек)Он состоит из 25 обьектов класса Person