我的问题是:
- 此代码是否正确,是否正确分配给车轮速度和持续时间
- 我需要做什么才能添加主方法来运行代码
- 使用for循环遍历每行,指示Finch机器人根据每行中的数字移动。使用代码JOptionPane在每次移动之后暂停。showMessageDialog(null,"Click OK to continue…");
公共类FinchArray {
public static final int LEFT_WHEEL = 0;
public static final int RIGHT_WHEEL = 1;
public static final int DURATION = 2;{
int[][] x = new int[10][3]; // 2D array filled with zeros
int time = 25;
for (int[] row : x) {
row[2] = time;
time += 25;
}
for (int[] row : x) {
row[DURATION] = time;
time += 25;
}
for (int[] row : x){
row[LEFT_WHEEL] = time;
time += 25;
}
for (int[] row : x){
row[RIGHT_WHEEL] = time;
time += 25;
}
Finch fRobot = new Finch();
fRobot.setWheelVelocities(LEFT_WHEEL,RIGHT_WHEEL,DURATION);
long before = System.currentTimeMillis();
while (System.currentTimeMillis() - before < 5000){
if(fRobot.isObstacle())break; {
}
fRobot.stopWheels();
fRobot.quit();
}
}
你可以像这样初始化你的2D数组(在Java中,它实际上只是一个1D数组的数组):
int[][] x = new int[10][3]; // 2D array filled with zeros
int time = 25;
for (int[] row : x) {
row[2] = time;
time += 25;
}
这使用了一个增强的for
循环,等价于:
int[][] x = new int[10][3]; // array filled with zeros
int time = 25;
for (int i = 0; i < x.length; ++i) {
int[] row = x[i];
row[2] = time;
time += 25;
}
请注意,这将使左轮和右轮速度保持默认值零。
你当前的代码首先创建一个10x10的2D数组,但然后你的循环是重新分配每一行是一个新的10个元素的数组,所以你最终得到一个10x10的数组(这不是你想要的)。
注:使用3个元素的数组来表示三个不同的数据片段并不是一种好的编程风格(尽管它可以正常工作)。通过对下标使用符号常量可以略微改进。在类的顶部声明:
public static final int LEFT_WHEEL = 0;
public static final int RIGHT_WHEEL = 1;
public static final int DURATION = 2;
然后使用这些来索引每一行:
for (int[] row : x) {
row[DURATION] = time;
time += 25;
}
由于每行表示三个不同的属性,因此更好的方法是定义一个单独的类来包含数据:
public class Step {
public int leftWheelSpeed;
public int rightWheelSpeed;
public int duration;
}
然后,你可以声明一个1D数组的Step
对象,而不是2D数组的int
值:
Step[] x = new Step[10];
int time = 25;
for (Step step : x) {
step.duration = time;
time += 25;
}
我不确定,但这可能是你在寻找什么?
import java.util.Arrays;
public class FinchArray {
public static void main(final String[] args) {
int[][] array = new int[3][10]; // initializing the array
for(int i = 0; i < array.length; i++) { // outer for loop loops over first dimension
int n = 25; // initializing the counter from 25 to 250
for(int j = 0; j < array[i].length; j++) { // inner for loop loops over second dimension
array[i][j] = n; // access the slots with the two indices i and j and give them the value of n
n += 25;
}
n = 25; // reset n to 25 after finishing the inner for loop
}
System.out.println(Arrays.deepToString(array));
}
}
输出:[[25, 50, 75, 100, 125, 150, 175, 200, 225, 250], [25, 50, 75, 100, 125, 150, 175, 200, 225, 250], [25, 50, 75, 100, 125, 150, 175, 200, 225, 250]]