2013-10-10 152 views
0

运行是一系列相邻的重复值。编写一个程序,生成一系列随机掷骰子并打印骰子值,只标记最长的游程。程序应该采取作为输入模掷的总数(例如10),然后打印:随机骰子发生器

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[] numbers = new int[count];更换int number;。接下来,用numbers[i] = ...代替number = ...

这会给你一个随机数组的数组(不要打印它们!)。当你生成你的数字时,记下你连续得到多少个相等的数字(为此添加一个特殊的计数器)。还要添加一个变量,该变量存储迄今为止最长运行时间的长度。每当你得到一个与前面的数字相等的数字时,增加计数器;否则,将计数器与最大值进行比较,必要时更改最大值,并将计数器设置为1。当您更新最大值时,请标记运行开始的位置(您可以从当前位置和运行的长度中看出)。

现在是检测最长运行时间的时候了:通过numbers数组,并在运行开始处放置一个左括号。当您到达运行结束时放入一个右括号,并完成打印以完成作业的输出。