Pages: [1]   Go Down
Print
Author Topic: Ultimo compito d'esame..aiuto  (Read 781 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« on: 01-10-2010, 20:43:38 »

Stavo provando a fare l'ultimo compito, con esiti ovviamente negativi  no:

Code:
Si fornisca un'efficiente implementazione dell'interfaccia
StackSet140910<E>, come mostrata nella pagina successiva.
La classe rappresenta un insieme ordinato i cui elementi sono
semplici stack (classe MStack<E>).
Ogni stack dell'insieme è rappresentato dal suo elemento che
si trova in cima allo stack. Ogni stack potrà contenere al
massimo 50 elementi.
L'insieme dovrà essere rappresentato attraverso una lista
concatenata e gli stack dell'insieme dovranno essere ordinati
in base al loro elemento rappresentante. Uno stack che non
contiene alcun elemento dovrà apparire nella lista prima di
qualsiasi altro stack (considerarlo come l'elemento più
piccolo dell'insieme)
La gestione delle eccezioni all'interno delle classi è
facoltativa.
Realizzare in seguito, mediante il metodo main() della
classe, un programma Java che prenda in input un file di
testo contenente una sequenza di numeri interi e restituisca
in output un file di testo contenente le specifiche della
struttura ottenuta dopo l'inserimento di tali numeri a
partire da uno StackSet140910 contenente 3 stack vuoti.
Il programma consegnato dovrà compilare correttamente e dovrà
produrre il corretto output. In caso contrario la soluzione
verrà considerata errata.
Specifiche della classe
Qualsiasi struttura dati ausiliaria dovrà essere
implementata dallo studente. Il file Java (e quindi la classe
Java) dovrà essere denominato con il proprio numero di
Matricola con un underscore “_” al posto del simbolo “/”
(“M01_123456.java”). Nel caso in cui la matricola inizi per
667 utilizzare il prefisso SS7 (“SS7_123456.java”). Il file
di input dovrà essere denominato “input.txt” mentre il file
di output dovrà essere denominato con la propria matricola
(“M01_123456.txt”, oppure “SS7_123456.java”).
File di output
Il file di input contiene una sequenza di numeri interi, uno
per riga.
File di output
Il file di output dovrà contenere la lista degli elementi
contenuti nei tre stack dell'insieme (uno stack per riga),
iniziando dagli elementi che si trovano in cima alla
struttura.

Questo è il mio codice...ho pensato di implementare anche lo stack come lista linkata...il codice compila però non funziona, il problema si presenta per via dei cast, molti saranno sbagliati, ma sono entrato in confusione....posto il codice e gli errori:

Code:
import java.util.*;
import java.io.*;

interface StackSet140910<E> extends Iterable<E>{
public int stacks ();
// ritorna il numero di stack (di tipo MStack<E>) dell'insieme
public int items ();
// ritorna il numero di elementi (E) dell'insieme
public MStack<E> getMin ();
// ritorna il primo stack vuoto dell'insieme.
// Se non esistono stack vuoti nell'insieme ritorna
// lo stack con il più piccolo valore in testa
public E pop ();
// effettua il pop sul primo stack dell'insieme
public void push (E elem);
// effettua il push di un elemento sul primo stack dell'insieme
public void addStack ();
// aggiunge un nuovo stack vuoto all'insieme
public Iterator<E> iterator();
// ritorna un iteratore di tutti gli elementi (di tipo E)
// contenuti negli stack dell'insieme
}

class Node<E>
{
private E element;
private Node<E> next;

public Node(E element, Node<E> next)
{
this.element=element;
this.next=next;
}

public E getElement(){return element;}

public void setElement(E element){this.element=element;}

public Node<E> getNext(){return next;}

public void setNext(Node<E> next){this.next=next;}
}

class LinkedList<E>
{
private Node<E> head, tail;
private int size;

public LinkedList()
{
size=0;
head=tail=null;
}

public Node<E> getHead(){return head;}

public Node<E> getTail(){return tail;}

public int getSize(){return size;}

public void addNodeTail(Node<E> node) //inserimento in coda
{
if(size==0)
tail=node;

else
{
tail.setNext(node);
tail=node;
}
    size++;
}

public void AddNodeHead(Node<E> node) //inserimento in testa
{
if(size==0)
head=node;
else
{
node.setNext(head);
head=node;
}
size++;
}

public Node<E> removeHead()    //rimozione in testa
{
Node<E> tmp=head;
head=head.getNext();
tmp.setNext(null);
size--;
return tmp;
}

}

class MStack<E>
{
private LinkedList<E> stack;           //lo implemento con linkedlist
private int size;

public MStack()
{
size=0;
stack=new LinkedList();
}

public int getSize(){return size;}

public void push(E element)
{
if(size<50)
{
Node<E> node=new Node(element,null);
stack.AddNodeHead(node);
size++;
}
}

public void pop()
{
stack.removeHead();
size--;
}

public E top()
{
Node<E> tmp=stack.getHead();
return tmp.getElement();
}
}

class InsiemeStackSet140910<E extends Comparable<E>> implements StackSet140910<E>
{
LinkedList<E> stackset;
private int size;

public InsiemeStackSet140910()
{
size=0;
stackset=new LinkedList();
}

public int stacks(){return size;}

public int items ()
{
int items=0;

Node<E> testa;

for(testa=stackset.getHead(); testa!=null; testa=testa.getNext())
items+=((MStack<E>)testa.getElement()).getSize(); 

return items;
}

public MStack<E> getMin ()
{
Node<E> testa;

MStack<E> tmp=null;
Node<E> min=stackset.getHead();

E minimo=(E)((MStack)min.getElement()).top();     

for(testa=stackset.getHead(); testa!=null; testa=testa.getNext())
{
if(((MStack)testa.getElement()).getSize()==0)         //anche qui non trva getSize()
{
tmp=(MStack<E>)testa.getElement();
return tmp;
}

else if(minimo.compareTo((E)((MStack)testa.getElement()).top())>0)
{
minimo=(E)((MStack)testa.getElement()).top();
tmp=(MStack<E>)testa.getElement();
}
}

    return tmp;
}

public E top()
{
return (E)stackset.getHead();
}

public E pop ()
{ size--;
E tmp=(E)stackset.removeHead();
return tmp;
}


public void push(E element)
{
Node<E> node=new Node(element,null);
((MStack)stackset.getHead().getElement()).push(node);
size++;
}

public void addStack()
{
MStack<E> nuovostack=new MStack();
Node<E> node=new Node(nuovostack,null);
stackset.AddNodeHead(node);
}

public Iterator<E> iterator(){
return new ElementsIterator(this);}


public String toString()
{
String s="";
Iterator<E> it=this.iterator();

while(it.hasNext())
s+=it.next();

return s;
}
}

class ElementsIterator<E> implements Iterator<E>
{
private InsiemeStackSet140910 insiemeIterabile;
private MStack<E> Internalcursor;
private Node<E> Externalcursor;

public ElementsIterator(InsiemeStackSet140910 insiemeIterabile)
{
this.insiemeIterabile=insiemeIterabile;
Internalcursor=((MStack<E>)((Node<E>)insiemeIterabile.top()).getElement());
Externalcursor=(Node<E>)insiemeIterabile.top();
}


public boolean hasNext()
{
if(Internalcursor.getSize()!=0)
return true;

else if(Externalcursor.getNext()!=null)
return true;

return false;

}

public E next()
{
E tmp=Internalcursor.top();
Internalcursor.pop();
if(Internalcursor.getSize()==0 &&Externalcursor.getNext()!=null)
{
Externalcursor=Externalcursor.getNext();
Internalcursor=(MStack<E>)Externalcursor.getElement();
}

else{
Externalcursor=null;
Internalcursor=null;
}

return tmp;
}

public void remove(){}
}



public class SS7_003292
{
public void Inserisci(String input, String output)
{
FileReader reader=null;
BufferedReader buff=null;
PrintWriter out=null;

try{
reader=new FileReader("input.txt");
buff=new BufferedReader(reader);
out=new PrintWriter("output.txt");

InsiemeStackSet140910 insiemeStack=new InsiemeStackSet140910();

insiemeStack.addStack();

while(buff.ready())
{
String elemento=buff.readLine();
insiemeStack.push(elemento);
}


   out.print(insiemeStack.toString());
}


catch(FileNotFoundException e1)
{
System.out.println("input.txt not found");
}

catch(IOException e2)
{
System.out.println("Input/Output error");
}

try{
buff.close();
out.close();
}

catch(IOException e2)
{
System.out.println("Error...it is not possible to close files");
}
}

public static void main(String [] args)
{
SS7_003292 main=new SS7_003292();
long start=System.currentTimeMillis();
main.Inserisci("input.txt", "output.txt");
long end=System.currentTimeMillis();
System.out.println("Il tempo d'esecuzione è "+(end-start)+" ns");
}

}


Code:
Exception in thread "main" java.lang.ClassCastException: Node cannot be cast to java.lang.Comparable
at InsiemeStackSet140910.top(SS7_003292.java:187)
at ElementsIterator.<init>(SS7_003292.java:236)
at InsiemeStackSet140910.iterator(SS7_003292.java:212)
at InsiemeStackSet140910.toString(SS7_003292.java:218)
at SS7_003292.Inserisci(SS7_003292.java:300)
at SS7_003292.main(SS7_003292.java:329)
>Exit code: 1

Se poteste aiutarmi...mi fareste un favore...grazie.
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
Lynx90
Matricola
*
Offline Offline

Posts: 33



« Reply #1 on: 02-10-2010, 14:22:32 »

Ciao, guarda la mia soluzione a questo link:http://forum.sdai.unict.it/index.php?topic=9597.15
ultimo post
Logged
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #2 on: 02-10-2010, 14:46:38 »

Grazie, mi è servito molto soprattutto per capire l'iteratore  pray
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
Pages: [1]   Go Up
Print
Jump to: