我要交作业,作业的最后一部分问:
假设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方法应该位于循环之前,等等。
您几乎已经拥有了。我认为您的主要问题是这部分:
int l = ((int)Math.random()*s.length());
您的(int)
演员表放错了位置。如果您阅读Javadoc,Math.random()
则会看到它返回一个双精度值“大于或等于0.0且小于1.0”。将这个范围的值强制转换为int
(即简单地舍去所有小数位)将始终导致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);
}
最后要在课堂上炫耀一下,您还可以看看Random
可以用类似以下内容替换上一行的课程:
int l = new Random().nextInt(s.length());
看看是否可以理解两种方法的区别。尽管这与您的分配和超出范围完全无关。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句