Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    ordinare un array

    Salve a tutti ragazzi, ho iniziato da pochissimo a programmare e mi trovo al primo intoppo,
    spiego il mio piccolo problema:
    ho un array riempito dall'utente, ed io lo devo ordinare in modo che alla stampa a video vedo prima un numero pari e poi un disparo in sequenza fino a che è ordinabile.
    ci ho provato con le mie poche conoscenze ma non ci riesco:
    so utilizzare solo il for oppure il while e pochissimi servizi java...

    Vi ringrazio in anticipo per l'aiuto

    io comunque continuo a provarci, se ci riesco vi faccio sapere....

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Se devi ordinare un array hai due soluzioni: o implementi tu uno dei noti algoritmi di ordinamento, o utilizzi classi/metodi già esistenti nel framework di Java per ordinare un array (parlo della classe java.util.Arrays e il suo metodo sort() ).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Per andbin,

    Purtroppo ancora no so utilizzare queste cose che tu mi hai detto, sono proprio agli inizi e diciamo che devvo fare tutto a mano, con cicli e variabili di appoggio,
    Ti dico come avevo intenzione di fare:
    scorro gli elementi dell'array appena ne trovo uno pari metto il primo numero dell'array in una variabile di appoggio,il numero pari lo memorizzo in prima posizione e dove stava il valore pari ci memorizzo il valore che sta in appoggio.
    non so se il ragionamento era corretto e comunque non mi viene.....

    Disperazione....

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da dom.vecchioni
    Purtroppo ancora no so utilizzare queste cose che tu mi hai detto, sono proprio agli inizi e diciamo che devvo fare tutto a mano, con cicli e variabili di appoggio,
    Ti dico come avevo intenzione di fare:
    scorro gli elementi dell'array appena ne trovo uno pari metto il primo numero dell'array in una variabile di appoggio,il numero pari lo memorizzo in prima posizione e dove stava il valore pari ci memorizzo il valore che sta in appoggio.
    non so se il ragionamento era corretto e comunque non mi viene.....
    Mi sembra di capire che la logica sull'ordine sia un po' particolare. Cioè se ho capito bene, non ti interessa tanto il valore di un elemento ma il fatto che sia pari o dispari. Dico bene?

    In pratica se hai inizialmente un array con dentro:

    34 12 17 22 8 5 9 11 45

    l'ordinamento che vorresti avere potrebbe essere:

    34 17 12 5 22 9 8 11 45

    Se non è così, spiega meglio che non ho capito.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    io farei una cosa al posto tuo(nn penso che conosci arraycopy vero?)

    allora istanzio 2 nuovi array un per i pari ed uno per i dispari, il problema è però vedere quanti pari ci sono e quanti dispari...


    allora usiamo la via più semplice ma anche la più lunga...

    int pari =0;
    int dispari = 0;
    for(int i = 0 ; i<arrayutente.length; i++)
    if((arrayutente[i] % 2) == 0)
    pari++;
    else
    dispari++;

    in questo modo ti crei le dimensioni dei due nuovi array

    int [] arraypari = new int[pari];
    int [] arraydispari = new int[dispari];

    rifai un ciclo for come quello precendente solo che a posto degli incrementatori,copi l'elemento i esimo nel suo array.

    ora se passi un numero di elementi pari questi 2 vettori hanno la stessa lunghezza,se invece sono dispari,uno dei 2 sarà più grande di uno...

    allora ti fai un altro controllo
    if(pari.length==dispari.length)
    for(int i =0;i<pari.length;i++)
    System.out.print(pari[i]+" "+dispari[i]+" ");
    if(pari.length>dispari.length)
    System.out.print(pari[i]+" ");
    for(int i=0;i<dispari.length;i++)
    System.out.print(dispari[i]+" "+pari[i+1]+" ");
    if(rifai lo stesso metodo di sopra solo che è nel caso che dispari sia più grande di pari...)


    l'ho buttato così adesso,dovrebbe funzionare in caso provalo e fai le dovute modifiche ^^
    inoltre è fortemente ottimizabile ma è una cosa che lascio fare a te in caso

  6. #6
    Per andbin:
    il problema è quello, lo avevi inteso benissimo,
    grazie ancora per l'aiuto

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Io farei così:

    codice:
    import java.util.*;
    
    public class Prova
    {
        public static void main (String[] args)
        {
            int[] dati = { 34, 12, 17, 22, 8, 5, 9, 11, 45 };
    
            System.out.println ("PRIMA: " + Arrays.toString(dati));
    
            for (int i = 0; i < dati.length; i++)
            {
                for (int j = i; j < dati.length; j++)
                {
                    if (dati[j] % 2 == i % 2)
                    {
                        int t = dati[j];
                        
                        for (int k = j; k > i; k--)
                            dati[k] = dati[k-1];
    
                        dati[i] = t;
                        break;
                    }
                }
            }
    
            System.out.println ("DOPO: " + Arrays.toString(dati));
        }
    }
    L'algoritmo che ho pensato credo sia interessante.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    infatti, ci sono un sacco di cosette nuove,
    grazie mille andbin...

  9. #9
    andbin sei un grande......
    ho analizzato il tuo codice e lo ho inplementato sul mio, funziona benissimo, grazie
    cè una cosa che non ho ben capito, nei cicli per ordinare l'array,perchè c'è nell' if:
    if (p[j] % 2 == i % 2){ la prima parte la so, la seconda dopo l'uguale uguale cosa mi indica?

    ho provato a metterci lo 0 e ho visto che mi ordina l'array in modo diverso ossia prima i pari e poi i dispari, come mai?

    Grazie ancora

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.