如何从字符串中打印随机字符?

时间:2016-02-10 21:56:44

标签: java

我有一份到期作业,作业的最后一部分要求:

  

假设s是任何字符串。编写一系列将从s打印随机字符的语句。

这是我到目前为止所提出的:

for(int j = 0; j < s.length(); j++){
}
int l = ((int)Math.random()*s.length());
char ch = s.charAt(l);
System.out.println(ch);

我认为这些是我学习如何理解/使用成功编写此代码所需的基本概念。我感到困惑的是这些特定代码行的位置,例如,如果charAt方法应该在循环之前,等等。

4 个答案:

答案 0 :(得分:4)

你几乎已经拥有它了。我认为你的主要问题是这一部分:

int

您的0演员阵容错位了。如果您阅读javadoc of Math.random(),则会看到它返回“大于或等于0.0且小于1.0”的双精度值。将此范围的值转换为int l = (int)(Math.random()*s.length()); (即简单地删除所有小数位)将始终生成System.in,其仅打印字符串的第一个字符。

解决方法是首先将其与字符串的长度相乘,然后进行演员:

public static void main (String[] args) throws java.lang.Exception
{
    String s = "foobar42";
    int l = (int)(Math.random()*s.length());
    char ch = s.charAt(l);
    System.out.println(ch);
}

如果您只想打印一个随机字符,则不需要任何类型的循环,因此您可以从代码中删除它。

有关工作示例,请参阅this fiddle。你还需要做的是考虑如何获取输入字符串(提示:可以从int l = new Random().nextInt(s.length()); 读取)。

{{1}}

最后在课堂上炫耀一下,你也可以看看Random类可以用

之类的东西代替上面的那一行。
{{1}}

看看你是否能抓住the difference between those two approaches。虽然这与你的任务完全无关,但是超出范围。

答案 1 :(得分:1)

您可以使用s.charAt(x)获取随机字符,其中x是介于0和String-1长度之间的随机数。

此代码如下:

String s = "text string";

for(int i = 0; i < 10; i++) { //prints 10 random characters from the String
    Random rand = new Random();
    int randomIndex = rand.nextInt(s.length());//returns a random number between 0 and the index of the last character of the string
    System.out.println(s.charAt(randomIndex));
}

当你需要多次这样做时,你只需将它放在这样的循环中:

.RefreshStyle = xlOverwriteCells

答案 2 :(得分:1)

尝试这种方法:

String s = "hello world";
System.out.println(Character.toString(s.charAt((new Random()).nextInt(s.length()))));
  • s.length()返回s;
  • 的大小
  • (new Random()).nextInt返回伪随机,均匀分布的int值介于0(含)和指定值(不包括)之外;
  • s.charAt返回指定位置的字符
  • Character.toString返回指定字符的字符串表示

答案 3 :(得分:1)

我会这样做:

System.out.println(s.charAt((int)(Math.random() * s.length())));