【发布时间】:2016-10-28 14:51:52
【问题描述】:
编写一个程序,在一个数组中生成一个包含 20 个随机掷骰子的序列,然后 打印骰子值,仅标记最长的运行时间,如下所示: 1 2 5 5 3 1 2 4 3 (2 2 2 2) 3 6 5 5 6 3 1 如果有超过一次的最大长度,请标记第一个。
我正在研究这个问题,这段代码一直有效,直到计算 maxCount。 但是,我坚持打印最终结果,这意味着我正在处理最后一个 for 循环以打印出问题所需的内容。 但是,结果不是我想要的。我怎样才能弄清楚?
import java.util.Random;
public class AA {
public static void main(String[] args) {
int count = 1;
int maxCount = 1;
int runEndsAt = 0;
// create array
int[] num = new int[20];
// create random object
Random numbers = new Random();
for (int i = 0; i < 20; i++) {
num[i] = numbers.nextInt(6) + 1;
// added 1 b/c it starts from 0
}
boolean inRun = false;
for (int i = 0; i < num.length; i++) {
if (inRun) {
if (num[i] != num[i - 1]) {
/*
* System.out.print("|" + count +"|");
* System.out.print(") ");
*/ inRun = false;
}
if (inRun) {
System.out.print("|" + count + "|");
count++;
}
}
if (!inRun) {
if (count > maxCount) {
maxCount = count;
runEndsAt = i;
}
count = 1;
if (i < 19)
// comparing index from i to i+1
if (num[i] == num[i + 1]) {
System.out.print("( ");
inRun = true;
}
}
}
if (inRun) {
/*
* System.out.print("|" + count +"|"); System.out.print(" )");
*/ }
for (int i = 0; i < num.length; i++) {
if (i == runEndsAt - maxCount) {
System.out.println("(");
if (i == runEndsAt) {
System.out.println(")");
}
}
}
}
}
【问题讨论】:
-
很高兴你得到了代码块(通常人们没有),但是看看代码本身的格式并问自己是否可读。 (提示:不,甚至远程也不行。)让您的帖子清晰,并证明您花时间这样做,可以提高您获得好答案的机会。
-
另外,创建一个不使用“随机”的示例,但仍然存在您尝试调试的错误。然后删除与错误无关的每一行代码。您应该能够将其缩减到 20 行代码(或大约),此时您甚至可以看到出了什么问题。
-
我试图修复可读的代码。
-
@DanielPark 你努力了多少?
-
没有。这根本没有格式正确。使用 Cmd-shift-F(在 Mac 上)、Ctrl-Shift-F(在 Windows/Linux 上)。如有疑问,请打开帮助菜单,然后搜索“格式”。