Domanda Spiegazione script java

minah

Utente Iron
2 Novembre 2022
1
1
0
5
Salve a tutti! sono Andrea e sono alle prime armi con Java. Ho questo programma che, dopo aver riempito casualmente un vettore con numeri dispari di due cifre, li modifica alternando a un numero dispari un numero pari ottenuto come somma dell’elemento corrente e dell’elemento di posizione precedente. Siccome il codice non l'ho scritto io, e non ci capisco un gran che, sapreste aiutarmi magari commentando affianco alle righe spiegandomi che cosa fanno? Grazie per l'eventuale risposta!


Java:
import java.util.Scanner;
import java.util.Random;

public class Main {
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        Random random = new Random();

        int max = 99;
        int min = 10;

        int i;

        int numeriGenerati=1;

        int numeri[] = new int[10];

        for (i=0; i<10; i++) {
            numeri[i] = random.nextInt(max-min)+min;

            if (numeri[i]%2 == 0) {
                i = i-1;
            } else {
                if (numeriGenerati%2 == 0) {
                    numeri[i] = numeri[i] + numeri[i-1];
                }
                numeriGenerati++;
                System.out.println("Numero "+i+": "+numeri[i]);
            }
        }
    }
}
 
Ciao, provo a spiegarti quello che ho capito da questo codice:
Java:
import java.util.Random;

public class Main {
    public static void main(String[] args) {
      
        int max = 99; //Inizializzo il massimo
        int min = 10; //Inizializzo il minimo
        int numeriGenerati=1; //Variabile utilizzata per capire dove scrivere i numeri pari,questo programma lo fa in tutte le posizioni pari dell'array

        int numeri[] = new int[10]; //Creo un array di numeri interi, la cui dimensione è pari a 10

        for (i=0; i<10; i++) {
            numeri[i] = random.nextInt(max-min)+min; //Genero numeri sempre nell'intervallo tra min e max

            if (numeri[i]%2 == 0) { //Se il numero è pari questa operazione è come se annullasse l'iterazione corrente perché riporta indietro l'indice della i e alla successiva iterazione questo valore viene sovrascritto da quello giusto
                i = i-1;
            } else {
                if (numeriGenerati%2 == 0) {//Controllo tramite la variabile che ti ho detto prima se mi trovo nella posizione giusta per scrivere un numero pari
                    numeri[i] = numeri[i] + numeri[i-1]; //Sommando numeri dispari ottengo sempre uno pari
                }
                numeriGenerati++; //Incremento la variabile per continuare a tenere traccia delle posizioni dove devo scrivere i numeri pari
                System.out.println("Numero "+i+": "+numeri[i]);// Stampo l'elemento i-esimo dell'array
            }
        }
    }
}

Tuttavia, io l'avrei implementata in modo diverso questa cosa...mi sembra più comprensibile e pulito:
Java:
import java.util.Random;

public class Main
{
    public static void main(String[] args) {
      
        int min = 10;
        int max = 99;
        int numeri[] = new int[10];
      
        Random random = new Random();
      
        for (int i = 0; i < 10; i++){ //Questo ciclo riempie l'array con numeri dispari
            numeri[i] = random.nextInt(max-min)+min;
            while ((numeri[i] % 2) == 0){
                numeri[i] = random.nextInt(max-min)+min;
            }
        }
      
        for (int i = 1; i < 10; i+=2){//Questo ciclo prende gli elementi dispari nelle posizioni pari dell'array e li fa diventare pari
            numeri[i] = numeri[i] + numeri[i-1];
        } 
        //Non ho aggiunto la stampa dell'array
    }
}
 
  • Mi piace
Reazioni: minah