-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(たとえば、 ) を初期化し、sbfor ループで、雪の量ごとに「*」文字を追加します。その後、 を返しsb.toString()ます。

また、for ループのループ条件が間違っています。ステートメントが false ではなく true の場合、ループは続行されます。

次の方法が機能するはずです。

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

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 (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 に答える
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

次のように文字列を初期化することもできます

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