【问题标题】:Displaying a string with hidden characters显示带有隐藏字符的字符串
【发布时间】:2015-02-23 01:02:45
【问题描述】:

我对一个显示从数组中随机选择的单词的类进行测试。

我正在尝试显示隐藏多个字符的单词

我获取了字符串,然后将其转换为字符数组,但我不知道从这里去哪里。

import java.util.Scanner;
public class wordTest {
    public static void main (String args[])
    {
        Scanner scanner = new Scanner(System.in);
        String readString = scanner.nextLine();
         char[] stringArray;


         String [] gamewords = { "dog", "cat", "coffee", "tag", "godzilla", "gamera", "lightning", "flash", "spoon", "steak", "moonshine", "whiskey", "tango", "foxtrot", "ganymede" 
                 , "saturn", "enterprise", "reliant", "defiant", "doom", "galapagos", "jidai", "sengoku"};

        arrayWords wl = new arrayWords();
     // Words w = new Words();
        Word n = new Word();


    int a = 0;
        int b = gamewords.length;


        RandNum rand = new RandNum(a,b);
        n.setWord(gamewords[rand.nextRandomIntegerInRange()]);

        stringArray = n.getWord().toCharArray();
        int blank1 = 1;
        int blank2 = 4; 

        RandNum blanks = new RandNum(blank1,blank2);



        n.setWord(gamewords[rand.nextRandomIntegerInRange()]);


            do{

                int i = 0;
                //scanner.nextLine();
                  for( i = 0; i < stringArray.length; i++){
                      for( i = 0 ; i < blanks.nextRandomIntegerInRange() ; i++ ){

                          stringArray[i] = '*';
                      }
                          System.out.println(stringArray[i]);

                      }


             }while(scanner.nextLine().equals(""));


    }


    }

【问题讨论】:

  • 到目前为止您尝试过什么?至少向我们展示您尝试生成随机数和屏蔽字符串等操作

标签: java arrays string char


【解决方案1】:

由于你没有明确定义你想要做什么,在这里我假设对于每个字符串,你随机屏蔽 2 个字符,在伪代码中,它看起来像:

if inputString.length < 2 {
    mask all character
} else {
    loop until 2 character masked {
        r = random from 0 to inputString.length-1
        if (inputString[r] is not masked) {
            set inputString[r] to mask character
        }
    }
}

一些提示:

  1. 要使“inputString”可修改,请使用StringBuilder
  2. 检查某个位置是否被屏蔽的方法,您可以简单地检查字符串中的字符是否 == 屏蔽字符,也可以使用 Set 保留所有屏蔽位置
  3. 为了找出被屏蔽的位置数,您可以保留一个计数器,或者如果您选择使用 Set,则只需使用 2 中的 Set 的大小。

【讨论】:

    【解决方案2】:

    好的,我想我已经找到了解决方案:

    for (int i = 0; i < stringArray.length ; i++) {
        stringArray[blanks.nextRandomIntegerInRange()] = '_';
        System.out.print(stringArray[i] + " " );
    }
    

    【讨论】:

    • 您的解决方案无法解决您在问题中描述的内容