Замените буквы на *

Создание игры в стиле палача

Теперь у меня есть случайное слово. Как заменить буквы слова звездочкой *, чтобы при запуске программы слово отображалось как *.

Я предполагаю, что когда кто-то вводит букву для игры виселицы, вы получаете индекс этого символа в слове, а затем заменяете соответствующий *.

public class JavaApplication10 {

public static String[] wordArray = new String[1];
public static String file_dir = "Animals.txt";
public static String selectedWord = "";
public static char[] wordCharacter = new char[1];
Scanner sc = new Scanner(System.in);

public static void main(String[] args) throws IOException {
    wordArray = get_word(file_dir);
    selectedWord = select_word(wordArray);

    System.out.println(selectedWord);  
}

public static String[] get_word(String file_dir) throws IOException {
    FileReader fileReader = new FileReader(file_dir);
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    List<String> lines = new ArrayList<String>();
    String line = null;
    while ((line = bufferedReader.readLine()) != null) {
        lines.add(line);
    }
    bufferedReader.close();
    return lines.toArray(new String[lines.size()]);
}

public static String select_word(String[] wordArray) {
    Random rand = new Random();
    int lines = Math.abs(rand.nextInt(wordArray.length)- 1);
    return wordArray[lines];
}

}


person Jay W    schedule 13.09.2015    source источник
comment
Я просто не могу заставить его работать должным образом, скорее всего, вы делаете что-то не так, но мы не можем догадаться, что это будет, если не увидим, что вы сделали.   -  person Peter Lawrey    schedule 13.09.2015
comment
Концептуально, чтобы ответить на первую часть, если вы знаете, сколько слов в Animals.txt, просто сгенерируйте случайное число между 1 и количеством слов в Animals.txt, используя класс Random, начните чтение вашего файла и разорвите цикл, когда он равен случайному числу, и у вас есть ваше случайное слово. Но опять же, пожалуйста, поместите исходный код, если вам нужна помощь с вашим решением.   -  person Shrikant Havale    schedule 13.09.2015


Ответы (3)


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

Затем вы можете читать файл построчно, пока не дойдете до этой случайной строки и не распечатаете ее.

// Open the file
FileInputStream fstream = new FileInputStream("testfile.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));

String strLine;
int counter=0;

//While-loop -> Read File Line By Line till the end of file
//And will also terminate when the required line is printed 
while ((strLine = br.readLine()) != null && counter!=randomValue){
    counter++;

    //You need to set randomValue using the Random method as suggested
    if(counter==randomValue)
        // Print the content on the console
        System.out.println (strLine+"\n");
}

//Close the input stream
br.close();
person Riddhesh Sanghvi    schedule 13.09.2015

Предполагая Java 8:

// Loading ...
Random R = new Random(System.currentTimeMillis());
List<String> animals = Files.readAllLines(Paths.get(path));

// ...
// When using
String randomAnimal = animals.get(R.nextInt(animals.size()));
person nobeh    schedule 13.09.2015
comment
Ты прав. Я играл, чтобы посмотреть, смогу ли я использовать правильный метод потока для произвольного доступа (например, findAny), но в конце забыл удалить. - person nobeh; 13.09.2015

Ответ на ваш первый вопрос:

  1. Сначала вам нужно получить общее количество строк
  2. Затем вам нужно сгенерировать случайное число между 1 и этим общим числом.
  3. Наконец, получить требуемое слово

     try {
            InputStream is = new BufferedInputStream(new FileInputStream("D:\\test.txt"));
            byte[] c = new byte[1024];
            int count = 0;
            int readChars = 0;
            boolean empty = true;
            while ((readChars = is.read(c)) != -1) {
                empty = false;
                for (int i = 0; i < readChars; ++i) {
                    if (c[i] == '\n') {
                        ++count;
                    }
                }
            }
            int noOfLines = count+1;
            System.out.println(noOfLines);
            Random random = new Random();
            int randomInt = random.nextInt(noOfLines);
            FileReader fr = new FileReader("D:\\test.txt");
            BufferedReader bufferedReader = 
                new BufferedReader(fr);
            String line = null;
            int counter =1;
            while((line = bufferedReader.readLine()) != null) {
                if(counter == randomInt)
                {
                  System.out.println(line); // This the word you want
                }
                counter++;
    
            }
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } 
        finally {
            //is.close();
        }
    
person Rehman    schedule 13.09.2015