使用数组列表在 Java 中创建掷骰子。 (不是和数组)
Creating a Dice Roller in Java with an Array List. (Not and Array)
我目前不知道我应该做什么来完成这项工作。作业已经上交,但我正在努力成为一名好学生,并弄清楚为什么它行不通。这是我遇到的问题:
一个运行是相邻重复值的序列。用一个主要方法写一个 Java class 生成一个
ArrayList
中的 20 次随机掷骰子序列,打印骰子值,通过包括标记 运行s
他们在括号中,像这样:
1 2 (5 5) 3 1 2 4 3 (2 2 2 2) 3 6 (5 5) 6 3 1
伪代码:
提示:使用以下伪代码:
将布尔变量 inRun 设置为 false。
对于 ArrayList 中的每个有效索引 i
如果在运行
如果 values[i]
与前面的值不同
打印 )。
在运行 = 假。
如果不在运行
如果 values[i] 与以下值相同
打印 (。
在运行=真。
打印值 [i]。
如果在运行中,打印 ).
我知道有很多这样的问题,但我发誓我都看过了。我找不到使用 ArrayList 与 Array 的足够相似的。
这是我的代码:
package run;
import java.util.ArrayList;
import java.util.Random;
public class DiceRoller {
public static void main(String[] args)
{
boolean inRun = false;
int roll;
ArrayList randomNumList = new ArrayList();
Random randNum = new Random();
for(int i = 0; i < 20; i++)
{
roll = randNum.nextInt(6);
randomNumList.add(roll);
}
//Gets the size of the ArrayList.
int sizeOfArray = randomNumList.size();
for (int i = 0; i <= sizeOfArray; i++)
{
if (inRun == true)
{
if (randomNumList.indexOf(i) == randomNumList.lastIndexOf(i)) //PROBLEM AREA//
{
System.out.print(")");
}
inRun = false;
}
if (inRun == false)
{
if(randomNumList.indexOf(i) == randomNumList.indexOf(i))//PROBLEM AREA//
{
System.out.print("(");
inRun = true;
}
}
}
System.out.println(randomNumList);
}
我不能为我的生活和互联网弄清楚为什么我不能得到正确的输出。我首先尝试做 if(randomNumList[] == randomNumList[i-1]
和 if(randomNumList[i] == randomNumList[i+1](i))
。这是我在网上能找到的所有内容,但给了我一个错误,它不能与 ArrayList
一起使用,它需要一个 Array
。所以它在代码中的方式,如果我到目前为止是如何得到它的。输出看起来像这样:
(((((()()()()()()()()()()()()()()()([4, 0, 0, 1, 3, 5, 3, 4, 0, 5, 1, 5, 3, 4, 2, 3, 4, 2, 3, 5]
请帮忙!!
让我们从基础开始。首先,你应该在 for 循环中一个一个地输出列表中的每个元素:
for (int i = 0; i < sizeOfArray; i++) {
System.out.print(randomNumList.get(i) + 1);
}
这将打印每个骰子卷。 +1
是因为骰子的数字是从 1 到 6,而不是从 0 到 5。
现在让我们通过考虑括号的情况来改进我们的代码:
- 如果某个条件得到验证
,则在 骰子打印之前打印 (
- 如果另一个特定条件得到验证
,则在 骰子打印后打印 )
像这样:
for (int i = 0; i < sizeOfArray; i++) {
// Print '(' if ...
System.out.print(randomNumList.get(i) + 1);
// Print ')' if ...
}
您需要测试的是"next element",i+1
。如果它与当前的相同并且您不在 运行 中,则应该先打印 (
。或者,如果你实际上在 运行 但下一个打破它,你应该打印 )
for (int i = 0; i < sizeOfArray; i++) {
boolean isNextTheSame = (i+1 < sizeOfArray) && randomNumList.get(i+1) == randomNumList.get(i);
if (!inRun && isNextTheSame) {
System.out.print("(");
inRun = true;
}
System.out.print(randomNumList.get(i) + 1);
if (inRun && !isNextTheSame) {
System.out.print(")");
inRun = false;
}
}
在您的伪代码中,它测试前一个元素以验证第二个条件,而不是下一个。但是结果是一样的
首先,您的显示完全是错误的,因为您正在执行第一个循环,只显示括号然后显示数组列表的系统输出。
那你的算法不好
ArrayList 可以像数组一样访问(只需使用 .get(index)),这不是问题
ArrayList的功能你应该详细研究一下,我想你还没有明白lastIndexOf和indexOf是干什么的
我建议你这样做 : 通过在 Java 中引用给出的提示
请注意:如果 ArrayList 中的对象是 Integer,则必须使用 equals 而不是 ==
boolean inRun = false;
for (int i = 0; i < sizeOfArray; i++) {
// If inRun If values[i] is different from the preceding value Print
// ).
if (inRun && randomNumList.get(i) != randomNumList.get(i - 1)) {
System.out.print(") ");
inRun = false;
} else
// If not inRun If values[i] is the same as the following value
// Print (
if (!inRun && i < sizeOfArray - 1 && randomNumList.get(i) == randomNumList.get(i + 1))
{
System.out.print("( ");
inRun = true;
}
System.out.print(randomNumList.get(i) + " ");
}
if (inRun) {
System.out.print(") ");
}
我目前不知道我应该做什么来完成这项工作。作业已经上交,但我正在努力成为一名好学生,并弄清楚为什么它行不通。这是我遇到的问题:
一个运行是相邻重复值的序列。用一个主要方法写一个 Java class 生成一个
ArrayList
中的 20 次随机掷骰子序列,打印骰子值,通过包括标记 运行s
他们在括号中,像这样:
1 2 (5 5) 3 1 2 4 3 (2 2 2 2) 3 6 (5 5) 6 3 1
伪代码:
提示:使用以下伪代码:
将布尔变量 inRun 设置为 false。
对于 ArrayList 中的每个有效索引 i
如果在运行
如果 values[i]
与前面的值不同
打印 )。
在运行 = 假。
如果不在运行
如果 values[i] 与以下值相同
打印 (。
在运行=真。
打印值 [i]。
如果在运行中,打印 ).
我知道有很多这样的问题,但我发誓我都看过了。我找不到使用 ArrayList 与 Array 的足够相似的。
这是我的代码:
package run;
import java.util.ArrayList;
import java.util.Random;
public class DiceRoller {
public static void main(String[] args)
{
boolean inRun = false;
int roll;
ArrayList randomNumList = new ArrayList();
Random randNum = new Random();
for(int i = 0; i < 20; i++)
{
roll = randNum.nextInt(6);
randomNumList.add(roll);
}
//Gets the size of the ArrayList.
int sizeOfArray = randomNumList.size();
for (int i = 0; i <= sizeOfArray; i++)
{
if (inRun == true)
{
if (randomNumList.indexOf(i) == randomNumList.lastIndexOf(i)) //PROBLEM AREA//
{
System.out.print(")");
}
inRun = false;
}
if (inRun == false)
{
if(randomNumList.indexOf(i) == randomNumList.indexOf(i))//PROBLEM AREA//
{
System.out.print("(");
inRun = true;
}
}
}
System.out.println(randomNumList);
}
我不能为我的生活和互联网弄清楚为什么我不能得到正确的输出。我首先尝试做 if(randomNumList[] == randomNumList[i-1]
和 if(randomNumList[i] == randomNumList[i+1](i))
。这是我在网上能找到的所有内容,但给了我一个错误,它不能与 ArrayList
一起使用,它需要一个 Array
。所以它在代码中的方式,如果我到目前为止是如何得到它的。输出看起来像这样:
(((((()()()()()()()()()()()()()()()([4, 0, 0, 1, 3, 5, 3, 4, 0, 5, 1, 5, 3, 4, 2, 3, 4, 2, 3, 5]
请帮忙!!
让我们从基础开始。首先,你应该在 for 循环中一个一个地输出列表中的每个元素:
for (int i = 0; i < sizeOfArray; i++) {
System.out.print(randomNumList.get(i) + 1);
}
这将打印每个骰子卷。 +1
是因为骰子的数字是从 1 到 6,而不是从 0 到 5。
现在让我们通过考虑括号的情况来改进我们的代码:
- 如果某个条件得到验证 ,则在 骰子打印之前打印
- 如果另一个特定条件得到验证 ,则在 骰子打印后打印
(
)
像这样:
for (int i = 0; i < sizeOfArray; i++) {
// Print '(' if ...
System.out.print(randomNumList.get(i) + 1);
// Print ')' if ...
}
您需要测试的是"next element",i+1
。如果它与当前的相同并且您不在 运行 中,则应该先打印 (
。或者,如果你实际上在 运行 但下一个打破它,你应该打印 )
for (int i = 0; i < sizeOfArray; i++) {
boolean isNextTheSame = (i+1 < sizeOfArray) && randomNumList.get(i+1) == randomNumList.get(i);
if (!inRun && isNextTheSame) {
System.out.print("(");
inRun = true;
}
System.out.print(randomNumList.get(i) + 1);
if (inRun && !isNextTheSame) {
System.out.print(")");
inRun = false;
}
}
在您的伪代码中,它测试前一个元素以验证第二个条件,而不是下一个。但是结果是一样的
首先,您的显示完全是错误的,因为您正在执行第一个循环,只显示括号然后显示数组列表的系统输出。
那你的算法不好 ArrayList 可以像数组一样访问(只需使用 .get(index)),这不是问题 ArrayList的功能你应该详细研究一下,我想你还没有明白lastIndexOf和indexOf是干什么的
我建议你这样做 : 通过在 Java 中引用给出的提示 请注意:如果 ArrayList 中的对象是 Integer,则必须使用 equals 而不是 ==
boolean inRun = false;
for (int i = 0; i < sizeOfArray; i++) {
// If inRun If values[i] is different from the preceding value Print
// ).
if (inRun && randomNumList.get(i) != randomNumList.get(i - 1)) {
System.out.print(") ");
inRun = false;
} else
// If not inRun If values[i] is the same as the following value
// Print (
if (!inRun && i < sizeOfArray - 1 && randomNumList.get(i) == randomNumList.get(i + 1))
{
System.out.print("( ");
inRun = true;
}
System.out.print(randomNumList.get(i) + " ");
}
if (inRun) {
System.out.print(") ");
}