Newsgroup: it.comp.java
Titolo: va in loop??





Carissimi tutti sono un super newbe ovvero non ho mai 
programmato ed ho iniziato da java.....


ora mi sono posto dopo aver studiato un poco di uml e le basi 
dell' OO ho incominciato dalle api di java 


i tipi primitivi ,operatori logici..operatori di incremento e 
decremento, l'istruzione ripetitiva for...il while ed il do while if 
...else


dunque date le conoscenze di cui sopra è possibile risolvere 
il seguente problema:DATI TRE NUMERI INTERI ORDINARLI SECONDO IL VALORE 
DECRESCENTE.


ora io  ci ho provato ma mi va in loop non prendetemi 
troppo in giro e considerate che è da appena poche ore che mi dedico 
alla


programmazione e devo entrare ancora nella 
logica....GRAZIE.


 


/*ordinatore di numeri*/
class ord2 {
 public 
static void main (String [] args) {
  int a=60 ;
  int b=100 
;
  int c=80 ;
  while (a>b) {
    if 
(b>c) {
    System.out.println ( a ) 
;
    System.out.println ( b ) ;
    
System.out.println ( c ) ;
    }
     
else {
     System.out.println ( a ) 
;
     System.out.println ( c ) 
;
     System.out.println ( b ) 
;
     }
    while (b>a) 
{
     if (a>c) {
     
System.out.println ( b ) ;
     System.out.println ( a ) 
;
     System.out.println ( c ) 
;
     }
      else 
{
      System.out.println ( b ) 
;
      System.out.println ( c ) 
;
      System.out.println ( a ) 
;
      }
     while (c>a) 
{
      if (a>b) 
{
       System.out.println ( c ) 
;
       System.out.println ( a ) 
;
       System.out.println ( b ) 
;
       
}
       else 
{
       System.out.println ( c ) 
;
       System.out.println ( b ) 
;
       System.out.println ( a ) 
;
       }
     
}
    }
   } 

 }
}   


 


 



     while (b>a) {
[...]
while(b>a) { istruzione; }
significa: esegui le istruzioni fra le graffe, ed eseguile ripetutamente
fintanto che la condizione b>a permane vera.
Ora, siccome tu hai messo a=60 e b=100 *costanti*, la condizione e'
*sempre* vera, percio' e' qui che va in loop.
Tieni conto che quando hai un ciclo while, all'interno del ciclo deve
esserci qualcosa che cambia la condizione del ciclo, in modo che prima o
poi essa diventi falsa.
In questo caso tu non hai nessun bisogno di un ciclo while, che serve a
ripetere un gruppo di istruzioni un certo numero di volte, cosa che non
hai bisogno di fare.
Hai solo bisogno di alcuni if annidati:
if(a<b) {
  if(b<c) {
    allora l'ordine e' a,b,c
  } else  {l'ordine e' a,c,b }
eccetera.
Cerca di risolvere il problema in questo modo. Non e' facile districarsi
con gli if annidati all'inizio, perche' si fa spesso confusione
sbagliando la clausola else. Spesso infatti scriviamo gli if pensando
che l'else sia legato con un determinato if e magari invece secondo la
sintassi del linguaggio e' legato con un altro (piu' esterno o piu'
interno).
Se non hai mai programmato e vuoi farlo un po' seriamente, metti in
conto che hai parecchio lavoro da fare e che forse (ma non sono sicuro)
prima della programmazione a oggetti potresti pensare alla
programmazione strutturata, per es. in Pascal o C.
Comunque e' importante che tu legga un libro che ti introduca alla
programmazione e alla scrittura di algoritmi. Infatti non sarai in grado
di escogitare le soluzioni per un problema semplicemente conoscendo la
sintassi del linguaggio. Studiare un po' di problemi classici e gli
algoritmi che li risolvono e' fondamentale per imparare a farlo noi
stessi.
P.S.: uno dei problemi classici e' proprio l'ordinamento! Ma il modo in
cui tu lo hai risolto ordina solo tre numeri e dunque nella pratica non
e' molto utile. Quello che devi imparare e' come scrivere un
*algoritmo*, ovvero una procedura che ordini sempre dei numeri dati,
indipendentemente da quanti e quali sono.
Ciao, buon lavoro.
-- 
Tommaso Paba
Togli ".no-spam." per rispondere (se c'e')
http://spazioweb.inwind.it/pabasoftware

Ciao,
La programmazione é un'arte difficile: studiare UML e le API di Java sono un
buon inizio, ma puo' essere molto utile leggere qualche buon libro o
tutorial sull'algorimica e le strutture di dati. Sono sempre di grande
utilità.
Per tornare al programmino che hai postato, forse non lo sai ma ordinare un
serie di valori non é la cosa piu facile che tu possa fare per cominciare.
Gli algoritmi di sorting sono un soggetto oramai ben studiato e ce ne sono
diversi (BubbleSort, QuickSort,...), ma resta ancora un soggetto forse
troppo complesso per un debuttante.
Ti presento comunque una soluzione semplice, anche se completamente
inefficace se usata con grandi serie.
public class Sort {
    public static void simpleSort(int[] array) {
        boolean modificato;
        /* loop fintanto che l'array non é ordinato */
        do {
            modificato = false;
            /* comparo ogni elemento con il seguente: se é inferiore allora
             * ne inverto la posizione */
            for(int i=0; i< array.length-1; i++) {
                if(array[i] < array[i+1]) {
                    int tmp = array[i];
                    array[i] = array[i+1];
                    array[i+1] = tmp;
                    /* segnaliamo che c'é stata una modifica*/
                    modificato = true;
                }
            }
        } while (modificato);
        /* quando il loop for ha percorso l'array
         * senza effettuare inversioni, allora
        * abbiamo finito */
     }
     public static void main(String[] args) {
        /* creazione di un array di interi */
        int[] valori = { 60, 100, 80, 10, 90 };
        /* chiamo il metodo sort con l'array in parametro. L'array sara'
         * cosi' ordinato in modo decresecente*/
       simpleSort(valori);
       /* faccio un loop che mi scrive ogni valore dell'array */
       for(int i=0; i<valori.length; i++) {
           System.out.println(valori[i]);
       }
    }
}
Spero ti sia d'aiuto e non esitare a chiedere chiarimenti.
Carlo
PS: ti consiglio di non postare in HTML sui newsgroup. Non tutti apprezzano.

 allaprogrammazione e devo entrare ancora nella


 wrote in 
  message 
8tvh4g$s9v$1...@news.mclink.it
...
