【问题标题】:Using Arrays Java [closed]使用数组 Java [关闭]
【发布时间】:2014-03-10 16:14:15
【问题描述】:

我的问题是:

  • 此代码是否正确,是否正确分配给车轮速度和持续时间
  • 我需要做什么才能添加main方法来运行代码
  • 使用 for 循环遍历每一行,指示 Finch 机器人根据每行中的数字移动。每次移动后暂停使用代码 JOptionPane.showMessageDialog(null,"点击确定继续...");

公共类 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();

    }





}

【问题讨论】:

  • 到目前为止你做了什么来解决你的问题?您是否编写了一些可以在此处发布的代码?
  • 您遇到了什么问题?你试过什么?
  • 您需要修改在 for(i = 0; i &lt; 256;i = i + 25); 处使用 for 循环的方式,在您将循环逻辑放入其中的条件之后,For 循环需要 {}
  • @theGreenCabbage - for 在主体是单个语句的情况下,循环不需要大括号。 OP 的问题之一(在许多问题中)是 for 循环由行尾的分号终止。另一个主要问题是使用i 作为索引和时间值。我的猜测是,当他的代码尝试将一个新的 10 元素数组分配给 x[256] 时,OP 得到了一个不错的 ArrayIndexOutOfBoundsException
  • 我的立场是正确的——但你写的是我试图暗示他但没有明确告诉他出了什么问题的 jist。

标签: java arrays multidimensional-array


【解决方案1】:

您可以像这样初始化您的二维数组(在 Java 中,它实际上只是一维数组的数组):

int[][] x = new int[10][3]; // 2D array filled with zeros
int time = 25;
for (int[] row : x) {
    row[2] = time;
    time += 25;
}

这使用enhanced for loop 并且等效于:

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;
}

请注意,这会使左右轮速保持默认值为零。

您当前的代码首先创建一个 10x3 二维数组,但随后您的循环将每一行重新分配为一个新的 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;
}

然后,您可以声明 Step 对象的一维数组,而不是 int 值的二维数组:

Step[] x = new Step[10];
int time = 25;
for (Step step : x) {
    step.duration = time;
    time += 25;
}

【讨论】:

  • 我现在遇到的另一个问题是如何将 25 到 250 的值分配给左轮、右轮和持续时间,然后使用 Finch 机器人运行这些值。
  • @user3351284 - docs 看起来很简单:为每一行调用 setWheelVelocities(int,int,int)。使用Swing timer 等待两次通话之间所需的时间。
  • 公开课Step需要添加什么?我真的不明白如何将数组分配给速度和时间。
  • @user3351284 - 我的示例代码展示了如何为 10 个步骤中的每一个步骤分配从 25 开始并增加 25 的持续时间值。您可以对轮速使用类似的逻辑。我很难理解这里有什么困难。
  • 最后一件事我想出了如何做到这一点,但我需要为代码创建一个单独的类来运行 Finch,因为我无法使用我分配的最终整数创建一个 main 方法.
【解决方案2】:

我不确定,但这可能是您要找的吗?

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]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-07
    • 2018-06-13
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 2013-01-20
    • 1970-01-01
    相关资源
    最近更新 更多