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

    Problema con algoritmo bubble sort

    Salve a tutti

    Scusate per la domanda elementare che sto per farvi, ma sono un novellino in programmazione java

    io ho fatto questo programma con eclipse:

    codice:
    public class studenti1 {
      
    	  private static String nome;
    	  private static String cognome;
    	  private static int matricola;
    	  private static int voto;
    	  private static char sesso; 
    
    	public  studenti1 (String nome, String cognome, int matricola, int voto, char sesso) {
    		this.nome = nome;
    		this.cognome = cognome;
    		this.matricola = matricola;
    		this.voto = voto;
    		this.sesso = sesso;
    	}
    	
    	public static void main(String[] args) {
    		int NumeroStudenti = 5;
    		String [] nome;
    		nome=new String[NumeroStudenti];
    		String [] cognome;
    		cognome=new String[NumeroStudenti];
    		int [] matricola;
    		matricola=new int[NumeroStudenti];
    		int [] voto;
    		voto=new int[NumeroStudenti];
    		char [] sesso;
    		sesso=new char[NumeroStudenti];
    		
    		for(int i=0 ; i<NumeroStudenti ; i++){ 
    		
    		System.out.print("inserisce nome: ");
    		nome [i]=Input.readString();
    		System.out.print("inserisci cognome: ");
    		cognome [i]=Input.readString();
    		System.out.print("inserisci matricola: ");
    		matricola [i] = Input.readInt();
    		System.out.print("inserisci voto: ");
    		voto [i] = Input.readInt();
    		System.out.print("inserisci sesso: ");
    		sesso [i]= Input.readChar();
    		 
            for(int c = 0; c < voto.length; c++) {
                
                for(int j = 0; j < voto.length-1; j++) {
    
                    //Se l' elemento j e maggiore del successivo allora
                    //scambiamo i valori
                    if(voto[j]>voto[j+1]) {
                        int k = voto[j];
                        voto[j] = voto[j+1];
                        voto[j+1] = k;
                        
                    }
                }   
            }
    		}
    		for(int i=0 ; i<NumeroStudenti ; i++){ 
    		System.out.println(nome[i]);
    		System.out.println(cognome[i]);
    		System.out.println(matricola[i]);
    		System.out.println(voto[i]);
    		System.out.println(sesso[i]);
    		
    		
    		}
    	}	
    }

    Ho fatto copia incolla di un algoritmo bubble sort dentro il main

    Diciamo che funziona, però ho un problema: con NumeroStudenti = 3 il primo valore di voto me lo segna 0, praticamente "perde" il voto più basso

    con NumeroStudenti = 5 mi restituisce 0 ai primi 2, poi però i restanti 3 li ordina

    mi potete dare una mano? dove ho sbagliato?

  2. #2
    io sostituirei questi tuoi cicli annidati
    codice:
    for(int c = 0; c < voto.length; c++) {
    
    for(int j = 0; j < voto.length-1; j++) {
    
    //Se l' elemento j e maggiore del successivo allora
    //scambiamo i valori
    if(voto[j]>voto[j+1]) {
    int k = voto[j];
    voto[j] = voto[j+1];
    voto[j+1] = k;
    
    }
    }
    }
    con questo
    codice:
    for(int x=0; x<voto.length-1; x++){
        for(int y=0; y<voto.length; y++){
            if(voto[x]>voto[y]){
                int app=voto[x];
                voto[x]=voto[y];
                voto[y]=app;
            }
        }
    }
    lo farei perchè vedo un po di incongruenze in quei for.
    purtroppo non ho potuto testare il codice da te scritto perchè non mi trova la classe Input e quindi, di conseguenza, non ho potuto testare la mia soluzione.

    inoltre, quando posti del codice, usa il tag CODE.
    così il codice da te postato è illegibile

  3. #3
    Ciao, grazie per la risposta e per le dritte

    ho sostituito il codice che hai postato, ora purtroppo mi perde il penultimo elemento nell'ordinamento (gli assegna zero) e poi è come se cominciasse di nuovo l'ordinamento daccapo.

    cioè, mettiamo per esempio che i voti siano 24, 23, 25, 26, 22, 29
    come risultato mi da:

    26
    25
    24
    23
    0
    29

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Come espressamente indicato nel Regolamento interno è necessario fare uso degli appositi tag CODE quando si posta del codice.
    Il codice, inoltre, va indentato.

    Il tutto per una corretta lettura che, nel caso del tuo primo post, è decisamente mancata.


    Sistemo io, se il codice è indentato.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    gli assegna zero
    l'assegnamento dello zero non è un problema di quei due for, ma si trova da qualche altra parte.

    posta anche il codice della classe Input, così che possiamo testare il progetto

    comunque si, c'è un errore mio nel for superiore (quello con la x)
    ho scritto un -1 che non centra nulla, in quanto deve controllare sino all'ultimo

    codice:
    for(int x=0; x<voto.length; x++){
                for(int y=0; y<voto.length; y++){
                    if(voto[x]>voto[y]){
                        int app=voto[x];
                        voto[x]=voto[y];
                        voto[y]=app;
                    }
                }
            }
    in poche parole, sbaglio o vuoi ordinare in modo decrescente i numeri con quei for?

  6. #6
    senza il -1 funziona alla grande!!

    grazie mille!!

    p.s. scusate per il codice, non sapevo come funzionasse =)

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.