Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Aiuto programmazione compito java

    Salve ragazzi, riposto con la speranza di aver fatto bene e che qualcuno mi aiuti.
    venendo a noi, posto ciò che mi viene chiesto

    Nella soluzione, prediligere il maggior riutilizzo di codice e la maggiore protezione possibile.

    Si chiede di leggere una sequenza di dati relativi ad esami, cognome e voto, dal file ES22.TXT e di
    inserire i dati letti in una opportuna struttura dati in modo tale che la struttura sia ordinata sul campo
    voto. Esempio di ingresso:
    Rossi
    18
    Bianchi 31
    Verdi
    27
    Armaroli 24
    • Per la realizzazione della struttura dati si scelga il componente più adatto della JCF.
    • Consultare le API.
    Si realizzi un metodo main in una classe Prova che legga il file di testo, crei la struttura dati e infine ne
    stampi il contenuto ordinato su un file di uscita (output.txt).

    Avevo quindi pensato di risolverlo così
    codice:
    import java.io.*;
    import java.util.*;
    
    public class Prova{
    	public static void main(String[] args){
    		List l=new ArrayList();
    		try{
    			BufferedReader input=new BufferedReader(new FileReader("es22.txt"));
    			String line=input.readLine();
    			while(line!=null){
    				l.add(line);
    				line=input.readLine();
    			}
    		input.close();
    		Collections.sort(l);
    		PrintWriter out=new PrintWriter(new FileWriter("output.txt"));
    		out.println(l);
    		out.close();
    		}
    		catch(Exception e){
    			System.out.println(e);
    		}
    	}
    }
    Il programma di per se funziona ma non fa ciò che viene richiesto, ovvero ordinare in base al voto e non in base al cognome.

    Cosa mi suggerite voi?

  2. #2
    Puoi definire anche altri classi oppure devi fare tutto nel main ?

  3. #3
    Scritta così, sembrerebbe che debba fare tutto da main. Tu come faresti nel caso dovessi fare tutto da main? Sennò implementando altre class come faresti?

    Intanto ti ringrazio per l'aiuto, ti giuro sarà una cavolata alla fine ma ci sto impazzendo

  4. #4
    Nel caso in cui devi fare tutto nel main, allora arrivati alla chiamata di Collection.sort (il metodo funziona solo che ovviamente ordina per tutta la stringa non per gli anni) implementerei un algoritmo di sorting, bublesort, mergesort, quicksort vedi un pò te.
    Se invece è possibile fare altri oggetti, creerei uno che rapresenta lo studente, con campi cognome, anni. E farei un bel Compartor da passare al metodo sort, per ordinare in base all'anno

  5. #5
    Quindi una class Studente che implementa il metodo compareTo?

    Nel caso invece del solo main,dici di costruire un algoritmo di ordinamento "ad hoc"?

    Non è che mi faresti vedere una sorta di pseudocodice per capire meglio?

  6. #6
    Ciao xarisaris,
    Questo è un esempio funzionante, ho usato un buble sort (non è molto efficente).
    codice:
    	public static void main(String[] args)
    	{
    		List<String> l = new ArrayList<String>();
    		try
    		{
    
    			BufferedReader input = new BufferedReader(new FileReader("es22.txt"));
    			String line = input.readLine();
    			while (line != null)
    			{
    				l.add(line);
    				line = input.readLine();
    			}
    			input.close();
    			// Collections.sort(l);
    			String temp = "";
    			String[] listToArray = l.toArray(new String[l.size()]);
    			for (int j = 0; j < listToArray.length; j++)
    			{
    				for (int i = j; i < listToArray.length; i++)
    				{
    					String[] lines1 = listToArray[j].split(" ");
    					String[] lines2 = listToArray[i].split(" ");
    					int anno1 = Integer.parseInt(lines1[1]);
    					int anno2 = Integer.parseInt(lines2[1]);
    					if (anno1 > anno2)
    					{
    						temp = lines1[0] + " " + lines1[1];
    						listToArray[j] = listToArray[i];
    						listToArray[i] = temp;
    					}
    				}
    			}
    			for (int i = 0; i < listToArray.length; i++)
    			{
    				System.out.println(listToArray[i]);
    			}
    		}
    		catch (Exception e)
    		{
    			e.printStackTrace();
    		}
    	}

  7. #7
    Ciao e mille grazie per il tuo aiuto...ciò nonostante mi restituisce codesto errore

    java.lang.ArrayIndexOutOfBoundsException: 1

    come mai?

  8. #8
    Semplicemente perchè era un abbozzo di codice, molto probabilmente non viene inizializzata correttamente la lunghezza dell'array b

  9. #9
    Ce l'ho, o per meglio dire ce l'abbiamo fatta

    Io ho risolto così, dammi pure una tua opinione

    codice:
    import java.io.*;
    import java.util.*;
    
    class Student implements Comparable{
    	protected String name;
    	protected int voto;
    	public Student(String name, int voto){
    		this.name=name;
    		this.voto=voto;
    	}
    	public int compareTo(Object x){
    		Student s=(Student)x;
    		int s1=this.voto-s.voto;
    		return s1;
    	}
    	public String toString(){
    		return (name+" "+voto);
    	}
    }
    	
    
    
    public class Prova{
    	public static void main(String[] args){
    		try{
    			List l=new ArrayList();
    			
    			BufferedReader input=new BufferedReader(new FileReader("es22.txt"));
    			String line=input.readLine();
    			while(line!=null){
    				String[] splitted=line.split(" ");
    				String name=splitted[0];
    				int vote=Integer.parseInt(splitted[1]);
    				l.add(new Student(name,vote));
    				line=input.readLine();
    			}
    		input.close();
    		Collections.sort(l);
    		PrintWriter out=new PrintWriter(new FileWriter("output.txt"));
    		out.println(l);
    		out.close();
    		}
    		catch(Exception e){
    			System.out.println(e);
    		}
    	}
    }
    Ah, mi hanno dato un nuovo file di testo,e puff,come per magia entrambe le versioni,cioè la mia e la tua si sono messe ad andare. Può darsi che il file es22.txt fosse sbagliato?

    Comunque ti ringrazio immensamente per l'aiuto

  10. #10
    L'implementazione è formalmente corretta, se vuoi giusto migliorarla un pò potresti prima di tutto usare i Generics in modo da non avere problemi di cast e in secondo luogo dichiarare le proprietà della classe studente private, un ultima cosa non stampare l'eccezione con System.out.println ma con e.printStackTrace altrimenti viene stampata solo il messaggio dell'eccezione.

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.