Entra

View Full Version : (Java) problemi con linkedList e rnd


aduri
20-08-2006, 17:37
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???

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() );
}
}
}

aduri
21-08-2006, 22:42
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() );
}
}

franksisca
22-08-2006, 08:50
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 modoa.compareTo(b)=-1 se a<b
a.compareTo(b)=0 se a=b
a.compareTo(b)=1 se a>b

quindi, detto ciò, credo che sia abbastanza facile capire come ordinare la lista.
se hai problemi fai un fischio;)