0

ランとは、隣接する繰り返し値のシーケンスです。サイコロをランダムに投げるシーケンスを生成し、サイコロの値を出力して最長のサイコロだけをマークするプログラムを作成します。プログラムは、サイコロを投げた合計回数 (例: 10) を入力として受け取り、次のように出力します。

1 6 6 3 (2 2 2 2 2) 5 2

正しい出力を得るために各数値を比較する方法について、私はかなり混乱しています。たぶん、配列を使用して値を格納します。任意の回答または入力が役立ちます。

 import java.util.Random;
 import java.util.Scanner;

 public class Dice 
 {
Random generator = new Random();
Scanner keyboard = new Scanner(System.in);

public void DiceCount()
{
int count;
int sides = 6;
int number;
System.out.println("How many die? ");
count = keyboard.nextInt();
for(int i=0; i < count; i++)
{
    number =  generator.nextInt(sides);
    System.out.print(number);
}

}

}

4

3 に答える 3

2

まず、に置き換えint number;ますint[] numbers = new int[count];。次に、 に置き換えnumber = ...ますnumbers[i] = ...

これにより、乱数の配列が得られます (まだ印刷しないでください!)。数字を生成するときに、同じ数字が何回連続して得られるかを記録します (そのための特別なカウンターを追加します)。また、これまでの最長ランの長さを格納する変数を追加します。前の数値と同じ数値を取得するたびに、カウンターをインクリメントします。それ以外の場合は、カウンターを最大値と比較し、必要に応じて最大値を変更し、カウンターを に設定し1ます。最大値を更新するときは、ランの開始位置をマークします (現在の位置とランの長さからわかります)。

ここで、最長のランを検出します。numbers配列を調べて、ランの開始位置に開きかっこを置きます。実行の終わりに達したら閉じ括弧を入れ、印刷を終了して割り当ての出力を完了します。

于 2013-10-10T02:29:56.840 に答える
0
import java.util.Random;
import java.util.Scanner;

public class Dice {
    Random generator = new Random();
    Scanner keyboard = new Scanner(System.in);

    public void DiceCount() {
        int sides = 6;
        System.out.println("How many die? ");
        int count = keyboard.nextInt();
        int[] array = new int[count];
        int longestLength = 1, currentLength = 1, longestLengthIndex = 0, currentLengthIndex = 1;
        int currentNum = -1;
        for (int i = 0; i < count; i++) {
            array[i] = generator.nextInt(sides);
            System.out.print(array[i] + " ");
            if (currentNum == array[i]) {
                currentLength++;
                if (currentLength > longestLength) {
                    longestLengthIndex = currentLengthIndex;
                    longestLength = currentLength;
                }
            } else {
                currentLength = 1;
                currentLengthIndex = i;
            }
            currentNum = array[i];
        }
        System.out.println();
        for (int i = 0; i < count; i++)
            System.out.print((i == longestLengthIndex ? "(" : "") + array[i] + (i == (longestLengthIndex + longestLength - 1) ? ") " : " "));
    }
}

注: これは、最初の最長範囲のみを使用します。したがって、1123335666 の場合、112(333)5666 になります。112(333)5(666) または 1123335(666) が必要な場合は、お任せします。とても些細なことです。

于 2013-10-10T04:03:10.357 に答える