|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Nov 2005
Città: Genova
Messaggi: 75
|
(Java) problemi con linkedList e rnd
Sto cercando di andare per gradi per raggiungere la soluzione del problema richiesto dal prof.
Testo: Definire la classe SortedLinkedList che estende la classe LinkedList (vista a lezione) PREMETTO CHE IO NON L'HO VISTA E NON SONO RIUSCITO AD AVERE APPUNTI e che mantiene ordinata la lista: ridefinire il metodo add() affinché inserisca gli elementi in ordine. Gli oggetti da inserire devono essere confrontabili e quindi devono implementare l’interfaccia Comparable. Si ordini la lista in modo che il valore massimo sia in testa (first) e il valore minimo in coda (last). Verificare la correttezza dell’implementazione: per esempio usando sequenze di stringhe in ordine, in ordine inverso, casuali, uguali. Verificare con sequenze di 21 elementi Integer casuali, con valori compresi nell’intervallo [-30,30]. Questa e' la prima parte del codice. Il mio primo problema e' capire come comprendere anche i numeri negativi nella lista random. Il codice ne elenca 21 interi positivi. Il secondo e' capire come ridefinire il metodo add() in una LinkedList??? Codice:
import java.util.*; public class TestLinkedList extends LinkedList { private static int elementi; public static void main ( String []args ) { if(args.length > 0) elementi = Integer.parseInt(args[0]); else elementi = 21; System.out.println( "Prova su " + elementi + "elementi." ); LinkedList l = new LinkedList(); // riempi la lista di numeri a caso tra -30 e +30 ListIterator it_aggiunta = l.listIterator(); for ( int i = 0; i < elementi; i++ ) { int rand = (int)Math.round ( Math.random() * 30 ); it_aggiunta.add( new Integer( rand ) ); } // stampa tutti i valori System.out.println( "-Collezione completa:" ); stampaCollezione( l ); } private static void stampaCollezione ( Collection c ) { Iterator i = c.iterator(); while ( i.hasNext() ) { System.out.println( i.next() ); } } } |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Nov 2005
Città: Genova
Messaggi: 75
|
Sono riuscito a fare un passo in avanti e visualizzo i numeri come richiesto.
Ora cerco di capire come fare l'overdrive del metodo add() con compareTo(). Allego il codice con compilazione a buon fine (a scopo didattico) x chi e' interessato: Codice: import java.util.*; public class SortedLinkedList extends LinkedList { private static int elementi; public static void main ( String []args ) { if(args.length > 0) elementi = Integer.parseInt(args[0]); else elementi = 21; System.out.println( "Prova su " + elementi + "elementi." ); LinkedList l = new LinkedList(); // riempi la lista di numeri a caso tra -30 e +30 ListIterator it_aggiunta = l.listIterator(); Random generatore=new Random(); for ( int i = 0; i < elementi; i++ ) { int segno=generatore.nextInt(2);// 0 o 1 int n=generatore.nextInt(31); if(n<15) l.add(new Integer(- n )); else l.add(new Integer(n)); } // stampa tutti i valori System.out.println( "-Collezione completa:" ); stampaCollezione( l ); } private static void stampaCollezione ( Collection c ) { Iterator i = c.iterator(); while ( i.hasNext() ) { System.out.println( i.next() ); } } |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
Secondo me ti conviene creare la classe SortedLinkedList a parte, e non metterci il main dentro, ma mettere il main da un'altra parte(io lo chiamo StarterClass
![]() Per la ridefinizione del metodo add(Object o) non farti impressionare, non è difficile. per prima cosa devi anche implementare il metodo compareTo(Object o) in modo che hai un metodo di confronto diretto, senza dover andare a controllare ogni volta. il compareTo() restituisce, tipicamente, chiamato in questo modo Codice:
a.compareTo(b)=-1 se a<b a.compareTo(b)=0 se a=b a.compareTo(b)=1 se a>b se hai problemi fai un fischio ![]()
__________________
My gaming placement |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:43.