Domanda Vorrei una spiegazione della logica di questo algoritmo in JAVA. Grazie.

SonoInHype

Utente Iron
27 Giugno 2019
5
3
0
14
Ultima modifica da un moderatore:
Salve, sono un principiante su questo mondo. E sono giunto allo studio del ciclo WHILE. Mi hanno assegnato degli esercizi di pratica. L'esercizio che in qualche modo sono riuscito a svolgerlo, ma che non ho capitto ed ho bisogno di una spiegazione della logica è questo:
"SCRIVI UN ALFORITMO IN JAVA CHE MEDIANTE UN CICLO WHILE CALCOLA LA SOMMA COMPRESA DI 2 NUMERI LETTI DA TASTIERA CHIAMATI A B.
Avrei bisogno di una spiegazione logica per comprendere questo algoritmo e una spiegazione dell'operatore "+=" che ho dimenticato. So che è come scrivere Var1=Va1+Var2 (Var1+=Var2). Ma non ho capito il suo reale funzionament generale e sopratutto il perchè si deve mettere in questo algoritmo.

Codice:
public static void main(String[] args) {
        // TODO code application logic here
        System.out.println("Inserisci il primo numero minore--->");
        Scanner num1 = new Scanner(System.in);
        double A = num1.nextDouble();
        System.out.println("Inserisci il secondo numero maggiore--->");
        Scanner num2 = new Scanner(System.in);
        double B = num2.nextDouble();
      
        double controllo=0;
        while (A<=B)
        {
            controllo = controllo+A;
            A++;
           System.out.println(controllo);
          
        }
      
    }
  
}

Se al posto di controllo = controllo+A; metto un'altra operazione non funziona. Se tolgo l'incremento, while diventa un ciclo infinito. (Forse perchè il controllo è vero). Poi, se controllo vale 0, facendo controllo = controllo+A; vale il valore scelto dall'utente. Poi con A++, si incrementa. Se abbiamo inserito 5, diventa 6. Ma se stampiamo controllo fa il suo dovere. Senno, non lo fa. Non ho capito... se il valore inserito in A è minore del valore inserito in B, deve dare lo stesso ciclo infinito, alla fine solo di 1 lo abbiamo aumentato con il ++. Ho le idee parecchio confuse, grazie mille a tutti per le risposte.
 
Prima di tutto ti consiglio di inserire il codice dentro i tag CODE e indentarlo meglio, così da poterlo leggere bene.

Non ho ben capito cosa vuoi sapere ma proverò a rispondere ad alcune cose:
1) a += b
Fare a += b è uguale a scrivere a = a + b, il compilatore lo convertirà automaticamente nella seconda forma. E' semplicemente un modo più semplice da leggere.

2) Scanner
Ho visto che hai creato due scanner, perchè? Basta fare un solo scanner e fare nextDouble due volte.

3) Ciclo infinito
Se smetti di incrementare A il ciclo non avrà mai fine e controllo non ha nulla a che fare con il ciclo.

Il programma in sè mi sembra corretto, qualche altra domanda da chiarire? :)
 
Prima di tutto ti consiglio di inserire il codice dentro i tag CODE e indentarlo meglio, così da poterlo leggere bene.

Non ho ben capito cosa vuoi sapere ma proverò a rispondere ad alcune cose:
1) a += b
Fare a += b è uguale a scrivere a = a + b, il compilatore lo convertirà automaticamente nella seconda forma. E' semplicemente un modo più semplice da leggere.

2) Scanner
Ho visto che hai creato due scanner, perchè? Basta fare un solo scanner e fare nextDouble due volte.

3) Ciclo infinito
Se smetti di incrementare A il ciclo non avrà mai fine e controllo non ha nulla a che fare con il ciclo.

Il programma in sè mi sembra corretto, qualche altra domanda da chiarire? :)

Ho 2 domande:
1)
+= cosa fa di preciso? Ho capito in teoria, ma in pratica che fa? Memorizza nella variabile quella variabile più la somma? Cosa fa di preciso "+="?

2)
Il programma l'ho scritto provando e riprovando. Ma non ho capito la logica di ciò che ho scritto. Perchè facendo quel lavoro con il +=, e stampandolo, ricevo come output la somna dei numeri compresi? La logica che c'è non mi è chiara
 
1)
+= cosa fa di preciso? Ho capito in teoria, ma in pratica che fa? Memorizza nella variabile quella variabile più la somma? Cosa fa di preciso "+="?
Come ho già scritto il compilatore si occupa di convertire A += B; in A = A + B;. E' letteralmente una conversione, quindi quello fa, non è un operatore separato.
Se si vuole entrare nello specifico, non fa solamente quello ma questo: tipo A += B; => tipo A = A + ((tipo) B); ovvero un casting per lo stesso tipo di A della variabile B (roba un pò più avanzata).

2)
Il programma l'ho scritto provando e riprovando. Ma non ho capito la logica di ciò che ho scritto. Perchè facendo quel lavoro con il +=, e stampandolo, ricevo come output la somna dei numeri compresi? La logica che c'è non mi è chiara
Il programma non fa altro che iterare i numeri compresi tra A e B, e ad ogni ciclo li sommi fra loro per ottenere il totale, quello appunto richiesto dall'esercizio:
1) Prendi A e B (esempio: 5 e 10)
2) Cominci un ciclo che parte da 5 e arriva a 10
3) Ciascuna iterazione del ciclo: aggiunge al totale il numero e aumenta il contatore

Così facendo una volta completato tutto avrai il totale nella variabile controllo.[/CODE]