2013-10-10 2 views
0

Прогон представляет собой последовательность смежных повторяющихся значений. Напишите программу, которая генерирует последовательность случайных штампов, и печатает значения штампа, отмечая только самый длинный прогон. Программа должна принимать в качестве входных данных общее количество штампованных бросков (например, 10), а затем печать:Random Dice Generator

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

Im совершенно запутался о том, как сравнить каждый номер чтобы получить правильный результат. Возможно, используя массив для хранения значений. Любые ответы или ввод помогут вам!

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); 
} 

} 

}

+0

Попробуйте использовать 'List' (возможно,' ArrayList'). – arshajii

+1

1. Да, вы можете использовать массив, 2. Научитесь использовать цикл, чтобы вы могли выполнять итерацию по массиву для выполнения своей работы. 3. Учитесь правильному отступу своего кода. 4. «Как умереть?», Это звучит так жестоко для меня. –

+0

Сделайте массив с подсчетом длины и сохраните там цифры. Следите за 4 переменными: длиной самой длинной повторяющейся последовательности, длиной текущей последовательности, индексом, на котором начинается самая длинная повторяющаяся последовательность, и начальным индексом текущей повторяющейся последовательности. – LazyCubicleMonkey

ответ

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), то я оставлю это вам. Это очень тривиально.

+0

Спасибо, что помог мне много –

2

Во-первых, заменить int number; с int[] numbers = new int[count];. Затем замените number = ... на numbers[i] = ....

Это даст вам массив случайных чисел (не печатайте их еще!). Когда вы создаете свои номера, обратите внимание, сколько равных чисел вы получаете в строке (добавьте для этого специальный счетчик). Также добавьте переменную, которая хранит длину самого длинного прогона. Каждый раз, когда вы получаете число, равное предыдущему числу, увеличивайте счетчик; в противном случае сравните счетчик с максимумом, при необходимости измените максимальное значение и установите счетчик на 1. Когда вы обновляете max, отметьте позицию начала запуска (вы можете указать текущую позицию и длину прогона).

Теперь пришло время обнаружить самый длинный прогон: пройдите через массив numbers и поместите открывающую скобку, где начинается запуск. Поместите закрывающую скобку, когда вы достигнете конца прогона, и закончите печать, чтобы завершить вывод для задания.