4.4.6 Vectori
Vectorii memorează elemente de același tip de date.
Vectorii reprezinta o variabila de tip referinta (pointer)
Valoarea implicita este egala cu null. null reprezinta un cuvant cheie in Java care indica o adresa inexistenta avand valoarea 0.
Vectorii (sau array-urile) sunt structuri de date fundamentale în Java care permit stocarea unui număr fix de elemente de același tip. În contextul FTC, vectorii pot fi foarte utili pentru gestionarea mai multor componente hardware sau pentru stocarea și procesarea datelor de la senzori.
Declarația și Inițializarea Vectorilor
Vectorii în Java sunt declarați specificând tipul elementelor pe care le vor stoca, urmat de paranteze pătrate []
.
Declarație
int[] vectorDeIntregi;
DcMotor[] motoare;
Inițializare
Vectorii pot fi inițializați fie în momentul declarării, fie ulterior, utilizând cuvântul cheie new
.
int[] vectorDeIntregi = new int[5]; // Vector de 5 elemente de tip int
DcMotor[] motoare = new DcMotor[4]; // Vector de 4 motoare
// Inițializare în momentul declarării
int[] altVectorDeIntregi = {1, 2, 3, 4, 5};
Accesarea Elementelor Vectorilor
Elementele unui vector pot fi accesate și modificate utilizând indexul lor, care începe de la 0.vectorDeIntregi[0] = 10; // Setează primul element la 10
int valoare = vectorDeIntregi[0]; // Accesează primul element
motoare[0] = hardwareMap.get(DcMotor.class, "motor1"); // Inițializare motor
Exemple în Contextul FTC
Gestionarea Mai Multor Motoare
Într-un robot FTC, este comun să folosești vectori pentru a gestiona mai multe motoare sau alte componente hardware.
public class MultiMotorOpMode extends LinearOpMode {
private DcMotor[] motoare = new DcMotor[4];
@Override
public void runOpMode() {
// Inițializarea motoarelor
motoare[0] = hardwareMap.get(DcMotor.class, "left_front");
motoare[1] = hardwareMap.get(DcMotor.class, "right_front");
motoare[2] = hardwareMap.get(DcMotor.class, "left_rear");
motoare[3] = hardwareMap.get(DcMotor.class, "right_rear");
waitForStart();
// Setarea puterii pentru toate motoarele
for (DcMotor motor : motoare) {
motor.setPower(0.5);
}
sleep(2000); // Rulează motoarele pentru 2 secunde
// Oprirea tuturor motoarelor
for (DcMotor motor : motoare) {
motor.setPower(0);
}
}
}
Procesarea Datelor de la Senzori
Vectorii pot fi folosiți și pentru a stoca și procesa datele de la mai mulți senzori.
public class MultiSensorOpMode extends LinearOpMode {
private ColorSensor[] senzoriCuloare = new ColorSensor[3];
@Override
public void runOpMode() {
// Inițializarea senzorilor de culoare
senzoriCuloare[0] = hardwareMap.get(ColorSensor.class, "sensor1");
senzoriCuloare[1] = hardwareMap.get(ColorSensor.class, "sensor2");
senzoriCuloare[2] = hardwareMap.get(ColorSensor.class, "sensor3");
waitForStart();
// Citirea și afișarea valorilor de la toți senzorii
for (int i = 0; i < senzoriCuloare.length; i++) {
telemetry.addData("Sensor " + i + " Red", senzoriCuloare[i].red());
telemetry.addData("Sensor " + i + " Blue", senzoriCuloare[i].blue());
}
telemetry.update();
}
}
Bucla for-each
pentru Vectori
Java oferă o buclă for-each
, care este utilă pentru a itera prin toate elementele unui vector fără a folosi un index.
for (DcMotor motor : motoare) {
motor.setPower(0.5);
}
Dimensiunea Vectorilor
Poți afla dimensiunea unui vector utilizând atributul length
.
int dimensiune = motoare.length; // Obține dimensiunea vectorului de motoare
Vectori de Obiecte
În FTC, deseori vei lucra cu vectori de obiecte, cum ar fi motoare, senzori sau servouri.
Servo[] servos = new Servo[2];
servos[0] = hardwareMap.get(Servo.class, "servo1");
servos[1] = hardwareMap.get(Servo.class, "servo2");
Recomandări pentru Utilizarea Vectorilor
- Inițializarea Corectă: Asigură-te că fiecare element al vectorului este corect inițializat înainte de utilizare.
- Accesarea în Limite: Verifică întotdeauna ca indexul să fie în limitele vectorului pentru a evita erorile
ArrayIndexOutOfBoundsException
. - Modificarea Vectorilor: Dacă ai nevoie de o structură de date dinamică, consideră utilizarea altor colecții din Java, cum ar fi
ArrayList
.
Vectorii sunt instrumente puternice și versatile în Java, esențiale pentru gestionarea și organizarea datelor și componentelor în programarea FTC. Utilizarea lor eficientă poate duce la cod mai clar, mai organizat și mai ușor de întreținut.