Использование массивов Java

Мой вопрос:

  • Правильно ли этот код и правильно ли он назначен для скорости и продолжительности вращения колеса
  • Что мне нужно сделать, чтобы добавить основной метод для запуска кода
  • используйте цикл 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();

 }





}
2 ответа

Вы можете инициализировать свой 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;
}

Обратите внимание, что это оставляет скорости левого и правого колес со значениями по умолчанию, равными нулю.

Ваш текущий код сначала создает 10x3 2D-массив, но затем ваш цикл переназначает каждую строку как новый 10-элементный массив, поэтому вы получаете массив 10x10 (что не то, что вы хотите).

PS Использование 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;
}

Затем вместо двумерного массива значений int вы можете объявить 1D массив объектов Step:

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

licensed under cc by-sa 3.0 with attribution.