Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 08.10.2015
Сообщений: 16

Игра анаграммы

29.05.2016, 21:18. Показов 3028. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть задача - написать игрушку Анаграммы, суть такая, есть массив слов, комп берет рандомно слово и меняет буквы в нем, а игроку нужно отгадать слово, собственно загвоздка в том, что бы разработать алгоритм вот этой перемены букв в слове. Не могли бы вы помочь в этой части кода, только можно без листов, коллекций и тд, по-простому, до этого мы еще не дошли))

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Scanner;
/**
 *
 * @author Menma91
 */
public class ArrayWorker {
    
    Scanner scan = new Scanner(System.in);
  
    String[] words = {"Car", "Pen", "Bag", "Lab"};
    //we work with that words
    int wordLength = words.length;
    //we get the length of word
    int rand = (int) (Math.random()*wordLength);
    //we get random word from array
    
    public void Show(){
            System.out.println(rand);
 }  
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.05.2016, 21:18
Ответы с готовыми решениями:

Java Anagrams из txt файла / Анаграммы В Яве
Есть класс Main, нужно создать класс Anagrams. Main выглядит так: public class Main { public static void main(String args)...

Написать программу "Анаграммы"
Ребята, помогите написать программу! Написать программу «Анаграммы» (anagrams), которая реализует популярную словесную игру. Игра...

Игра - анаграммы
Анаграмма – это слово, в котором перевернуты буквы, например, «ШАДОЛЬ» - «ЛОШАДЬ», а «ТИВОНКР» - это «ВТОРНИК». Программа рассчитана на...

13
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
30.05.2016, 01:34
Menma91,
Цитата Сообщение от Menma91 Посмотреть сообщение
что бы разработать алгоритм
разбиваете слово на символы, генерируете случайные числа в диапазоне от 0 до длины слова (важно чтобы числа не повторялись!) и меняете символы в массиве согласно новым индексам. Усё...
0
 Аватар для Aviz__
2753 / 2060 / 509
Регистрация: 17.02.2014
Сообщений: 9,489
30.05.2016, 12:28
Лучший ответ Сообщение было отмечено Menma91 как решение

Решение

Как то так, это делается
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package cyberforum;
 
import java.util.Random;
 
public class CyberForum {
    private static String getAnagram(String word) {
        if (word.length() < 1)
            return word;
        String anagram = "";
        int [] randomIndex = new int[word.length()];
        for (int i = 0; i < word.length(); i++) {
            randomIndex[i] = i;
        }
        int indexEndMix = word.length() - 1;
        int temp;
 
        Random randomInd = new Random();
        while (indexEndMix > 1) {
            int tempIndex = Math.abs(randomInd.nextInt(indexEndMix));
            temp = randomIndex[tempIndex];
            randomIndex[tempIndex] = randomIndex[indexEndMix];
            randomIndex[indexEndMix] = temp;
            indexEndMix--;
        }
        for (int i = 0; i < word.length(); i++) {
            anagram += word.charAt(randomIndex[i]);
        }
        return anagram;
    }
 
    public static void main(String[] args) {
        String[] wordsArr = {"car", "pen", "bag", "lab"};
        for (int i = 0; i < wordsArr.length; i++) {
            System.out.print(wordsArr[i] + " ---> ");
            System.out.println(getAnagram(wordsArr[i]));
        }
 
    }
}
Bash
1
2
3
4
car ---> cra
pen ---> pne
bag ---> bga
lab ---> lba
1
 Аватар для Ozick
20 / 14 / 13
Регистрация: 07.02.2016
Сообщений: 90
30.05.2016, 12:56
Aviz__, как-то не случайно оно у вас меняется(последние две местами, и все)..
0
 Аватар для Aviz__
2753 / 2060 / 509
Регистрация: 17.02.2014
Сообщений: 9,489
30.05.2016, 13:00
Ozick, Запустите несколько раз и более длинные слова, чем из трех букв, тоже
0
 Аватар для Ozick
20 / 14 / 13
Регистрация: 07.02.2016
Сообщений: 90
30.05.2016, 13:13
Вот мое:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public static void main(String args[]){
        System.out.println("<Чтобы выйти введите exit>");
        while(true){
            String[] words = {"корзина", "картина", "картонка", "собаченка"};
            int r = (int)(Math.random()*words.length);
            String word = words[r];
            String word_2 = word;
            //System.out.println(word_2);
            String new_word = "";
            while(word_2.length() > 0){
                int index = (int)(Math.random()*word_2.length());
                String ch = word_2.substring(index, index+1);
                word_2 = word_2.replaceFirst(ch, "");
                new_word += ch;     
            }
            System.out.println(new_word);
            System.out.println("Как вы считаете, что это за слово?");
            String test_word = new java.util.Scanner(System.in).next();
            if(test_word.equals("exit"))System.exit(0);
            else
            for(int i = 5; i >= 0; i--){
                if(test_word.equals(word)){
                    System.out.println("Вы отгадали! Это слово " + word.toUpperCase());
                    break;
                }
                else{
                    if(i == 0)System.exit(0);
                    System.out.println("Не правильно! Осталось " + i + " попыток");
                    test_word = new java.util.Scanner(System.in).next();
                }
            }
        }
    }
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
30.05.2016, 13:19
если не проверять слова, которые состоят из одного повторяющегося символа, то как вариант
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class AnagrammGenerator {
 
    private static final Random rnd = new Random();
 
    public static void main(String[] args) {
        String[] words = {"Car", "Pen", "Bag", "Lab"};
        for (String w: words) System.out.printf("%s -> %s%n", w.toLowerCase(), getAnagramm(w));
    }
 
    private static String getAnagramm(String word) {
        if (word == null || word.length() < 2) throw new IllegalArgumentException("Длина слова должна быть > 1");
        word = word.toLowerCase();
        char[] chars = word.toCharArray();
        while (word.equals(String.valueOf(chars))) shuffle(chars);
        return String.valueOf(chars);
    }
 
    private static void shuffle(char[] chars) {
        for (int i = 0; i < chars.length; i++) {
            int pos1 = rnd.nextInt(chars.length);
            int pos2 = rnd.nextInt(chars.length);
            char c = chars[pos2];
            chars[pos2] = chars[pos1];
            chars[pos1] = c;
        }
    }
}
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
30.05.2016, 13:29
Чёт многих такая простенькая штучка зацепила... Добавлю тогда и свои пять копеек:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class Anagramm {
    public static int[] getRandomArray(int size) {
        int[] array = new int[size];
        Set<Integer> set = new LinkedHashSet<>();
        while (set.size() < size) {
            set.add((int) (Math.random() * size));
        }
        Iterator<Integer> it = set.iterator();
        for (int i = 0; i < array.length; i++) {
            array[i] = it.next();
        }
        return array;
    }
 
    public static String getRandomString() {
        String[] str = {"глобус", "шахтер", "презентация", "вершина", "дротик", "поребрик", "забота", "окурок", "консервы", "уборка", "береза"};
        return str[(int) (Math.random() * str.length)];
    }
 
    public static String getAnagramm(String str) {
        StringBuilder sb = new StringBuilder();
        int[] code = getRandomArray(str.length());
        char[] array = str.toCharArray();
        for (int i = 0; i < array.length; i++) {
            sb.append(array[code[i]]);
        }
        return sb.toString();
    }
 
    public static void main(String[] args) {
        int count = 0;
        String str = getRandomString();
        System.out.println(getAnagramm(str));
        String[] step = {"Первая", "Вторая", "Третья"};
        for (int i = 0; i < 3; i++) {
            System.out.print(step[i] + " попытка: ");
            String temp = new Scanner(System.in).nextLine();
            count++;
            if(str.equals(temp)){
                System.out.println("Вы угадали!");
                break;
            }else{
                if(count < 3)
                {
                    System.out.println("Неверно");
                }else{
                    System.out.println("Вы не угадали, было загадано слово: " + str);
                }
            }
        }
    }
}
1
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
30.05.2016, 13:43
Цитата Сообщение от Menma91 Посмотреть сообщение
только можно без листов, коллекций и тд, по-простому,
Цитата Сообщение от HOBATOP Посмотреть сообщение
Set<Integer> set = new LinkedHashSet<>()
///
0
30.05.2016, 14:58

Не по теме:

Паблито, :) - ага, согласен, думал ни кто не заметит (шутка). Просто мне Set симпатичен не знаю почему...

0
0 / 0 / 0
Регистрация: 08.10.2015
Сообщений: 16
31.05.2016, 17:30  [ТС]
совсем не сложно, попросил же 8))
0
 Аватар для RedPatrick
143 / 115 / 61
Регистрация: 13.01.2016
Сообщений: 305
31.05.2016, 18:09
Menma91, по-моему проще некуда) Хотя, если вы проходили StringBuilder....
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Main {
    
    public static void main(String[] args) {
        String[] s = {"This","is an","Anagramm","game"};
        for (int i = 0; i < s.length; i++)
            System.out.println(permutate(s[i]));
    }
    
    public static String permutate (String s){
        String result = "";
        int limit = s.length();
        int index;
        for (int i = 0; i < limit; i++){
            index = (int) (Math.random() * s.length());
            result = result + s.substring(index, index + 1);
            s = s.substring(0, index) + s.substring(index + 1, s.length());
        }
        return result;
    }
}
0
 Аватар для Aviz__
2753 / 2060 / 509
Регистрация: 17.02.2014
Сообщений: 9,489
31.05.2016, 18:46
Цитата Сообщение от Menma91 Посмотреть сообщение
не сложно, попросил же 8))
Вам и мой метод сложен?
0
0 / 0 / 0
Регистрация: 08.10.2015
Сообщений: 16
06.06.2016, 21:46  [ТС]
Нет, Ваш как раз-таки очень понравился, спасибо!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.06.2016, 21:46
Помогаю со студенческими работами здесь

Игра Анаграммы
Хочу сделать так чтобы во время просьбы о подсказке при нажатии &quot;нет&quot; выходило из игры, пробовал сам - не вышло Помогите оптимизировать...

WPF | Игра Анаграммы
Нужна помощь. Из чего состоит задача В общем есть окно в котором будет: TextBox1(ввести слово), Button1(вывести слово из словаря),...

Анаграммы
Напишите программу, которая вводит с клавиатуры слово длиной не более 14 букв и выводит на экран количество различных анаграмм, которые...

Анаграммы
Есть такая несложная задача. Выписать все слова, которые являются анаграммами друг для друга, например «замок» и «мазок». Проверка...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru