如何标记输出并删除零?

vhmi4jdf  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(421)

这是一个程序来模拟滚动骰子20次,并标记最连续的数字,一个骰子没有0,我不知道如何删除,我是新的java

  1. package diceroll;
  2. import java.util.Random;
  3. public class Roll {
  4. //public static void main(String[] args) {
  5. private static Random generator = new Random();
  6. public static int[] randomIntArray(int length, int n)
  7. {
  8. int [] ems = new int [length];
  9. for (int i = 0; i <ems.length; i++)
  10. ems[i] = generator.nextInt(n);
  11. return ems;
  12. }
  13. }
  1. package diceroll;
  2. import java.util.Arrays;
  3. public class Dice {
  4. public static void main(String[] args) {
  5. int[] ems = Roll.randomIntArray(20,7);
  6. System.out.println(Arrays.toString(ems));
  7. }
  8. }

当它打印时,它会打印如下内容:[4,2,2,5,2,0,5,0,5,5,1,3,3,3,1,4,3,1,4,4]
我怎样才能使代码不产生零并像这样标记最连续的数字:[4,2,2,5,2,0,5,5,1,(3,3,3),1,4,3,1,4,4]

ktecyv1j

ktecyv1j1#

要避免0,必须将1添加到nextint输出(它从0开始)。
可以在数组填充期间标记最连续的数字。
像这样的

  1. int length=1;
  2. int defLength=0;
  3. int startIdx=0;
  4. int defStartIdx=0;
  5. int endIdx=0;
  6. int defEndIdx=0;
  7. // Needed in order not to override start index
  8. boolean found = false;
  9. if(efs[i] == efs[i-1]) {
  10. ++length;
  11. if(!found) {
  12. startIdx=i-1;
  13. found = true;
  14. }
  15. } else {
  16. if(found) {
  17. endIdx=i-1;
  18. found=false;
  19. }
  20. if(defLength < length) {
  21. defEndIdx = endIdx;
  22. defStartIdx = startIdx;
  23. found = false;
  24. }
  25. }

然后需要一个print方法,在打印efs[defstartidx]和efs[defendidx]之前插入括号

展开查看全部
jfgube3f

jfgube3f2#

我怎样才能使代码不产生零。。。
Random#nextInt(n) 返回一个介于0(包括0)和n(不包括n)之间的数字。您可以将1添加到结果中,将其更改为介于1和n(包括1和n)之间的数字。如果要排除n,请通过 n-1nextInt(...) .
... 标记最连续的数字。。。
你必须自己计算并提供自己的打印程序。
要计算最长的等号行,只需在数组上迭代一次,然后计算每个序列的长度(如果数字不同,则length=1;如果数字相等,则length+=1)。无论何时发现新序列或到达数组末尾,请检查最后一个序列是否比之前最长的序列长,如果是,请更新该序列的起始索引和新的最大长度。
迭代数组进行打印时,检查是否输入了之前计算的序列,如果输入了,则打印 ( . 然后检查是否再次退出序列或点击结尾并打印 ) .

相关问题