-1

我有一个名为 的类SnowFallReport,当从它创建一个对象时,它会随机分配一个从 1-20 的数字到一个名为 的字段snowFall。目的是生成具有随机降雪量的虚构降雪报告。然后我尝试创建一种方法,可以根据字段中的数字显示一定数量的星号snowFall。给了我一个提示,我应该使用for循环来这样做,我只是不知道如何正确地用词。代码如下:

import java.util.Random;

public class SnowFallReport
{   

    // Random amount of snow
    private double snowAmount;

    // Default constructor creates random amount and assigns to snowAmount
    public SnowFallReport()
    {
        Random snowFall = new Random();
        snowAmount = (snowFall.nextDouble() * 20);
    }

    public double getSnow()
    {
        return snowAmount;
    }

    public String getStars()
    {
        for (int starCount = 0; starCount >= snowAmount; starCount++)
            return "*";
         /* This is what I thought it should be^ but it turns out I need a return
 statement outside of the for loop. I've tried a couple of different ways with no luck */

    }

    public static void main(String[] args)
    {
        SnowFallReport day1 = new SnowFallReport();
        String lol = day1.getStars();
        System.out.print(lol);
    }   
}
4

6 回答 6

1

在您的getStars方法中,初始化一个StringBuffer(比如说,sb),然后在您的 for 循环中,为每个雪量附加一个“*”字符。然后,返回sb.toString()

此外,您的 for 循环中的循环条件是错误的。如果语句为真而不是假,则循环将继续。

以下方法应该有效:

public String getStars()
{
    StringBuilder sb = new StringBuilder();
    for (int starCount = 0; starCount < snowAmount; starCount++)
        sb.append("*");
    return sb.toString();
}
于 2013-02-21T01:12:39.783 回答
0

你也可以像这样初始化字符串

char[] c = new char[snowFall];
Arrays.fill(c, '*');
System.out.println(new String(c));
于 2013-02-21T01:16:23.680 回答
0

您可能想使用 QuickCheck 库中的生成器,就预先存在的PrimitiveGenerators而言,它真的很酷

这很容易

Generator<String> generator = PrimitiveGenerators.strings(5,20);
for (int i=0;i<10;i++) {
  String randomString = generator.next();
  ...
}
于 2013-02-21T01:17:09.773 回答
0

这是一个简单的 for 循环,它将返回星数。

    StringBuilder sb = new StringBuilder();
    for (int starCount = 0; starCount <= snowAmount; starCount++)
        sb.Append("* ");
    return sb;

您也可以尝试 yield return ,它会返回一个星号,然后继续循环。

    for (int starCount = 0; starCount <= snowAmount; starCount++)
        yield return "*";

此外,您的更大符号应该是小于符号:)

于 2013-02-21T01:13:16.717 回答
0
StringBuilder sb = new StringBuilder();
for (int starCount = 0; starCount < snowAmount; starCount++) {
    sb.append('*');
}
return sb.toString();
于 2013-02-21T01:14:27.453 回答
0
for (int starCount = 0; starCount >= snowAmount; starCount++)

说 startCount = 0。当 startCount >= snowAmount 执行循环然后增加 startCount。

for (int starCount = 0; starCount <= snowAmount; starCount++)

另外:在 for 循环之后直接返回将打破循环 - 您需要将 * 添加到缓冲区,然后在完成循环后返回缓冲区。

于 2013-02-21T01:12:10.930 回答