我有一份到期作业,作业的最后一部分要求:
假设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方法应该在循环之前,等等。
答案 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())));