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

Discussione: Perchč non compila?

  1. #1

    Perchč non compila?

    Ho un esercizio, aldilą della corretteza logica ci deve essere un errore diverso:

    codice:
    import java.io.*;
    
    public interface Stack <E>
    {
    	public int size();
    	//Return numero elementi
    	
    	public boolean isEmpty();
    	//Return true se lo stack č vuoto
    	
    	public void push(E object);
    	//Pone in cima allo stack un elemento
    	
    	public E pop(); 
    	//Elimina l'elemento in cima allo stack e lo restituisce
    	
    	public E top(); 
    	//Indica qual č l'elemento in cima allo stack senza estrarlo
    	
    }
    
    public class Node <E>{
    	private E element;
    	private E next;
    	
    	public Node(E element, E next)
    	{
    		this.element=element;
    		this.next=next;
    	}
    	
    	public Node <E> getElement() {return element;}
    	
    	public Node <E> getNext() {return next;}
    
    	public void setElement(E object){ element=object;}
    	
    	public void setNext(Node <E> e){element.getNext()=e;}
    }
    
    public class NodeStack <E> implements Stack <E> {
    	
    	private Node <E> top;
    	private int size;
    	
    	public NodeStack()
    	{
    		top=null;
    		size=0;
    	}
    	
    	public int size() {return size;}
    	
    	public boolean isEmpty(){return (top==null);}
    	
    	public void push(E element){
    		Node <E> n=new Node <E>(element,top);
    		top=n;
    		size++;
    	}
    	
    	public E pop(){
    		if(E.isEmpty()) throw new EmptyStackException("Stack vuoto");
    		E object=top.getElement();
    		top=top.getNext();
    		size--;
    		return object;
    	}
    	
    	public E top()
    	{
    		if(E.isEmpty()) throw new EmptyStackException("Stack vuoto");
    		return top.getElement();
    	}
    	
    	public String toString()
    	{
    		
    }
    		
    	
    	
    }
    
    public class EsercizioI{
    
    
    public static void main(String []args)
    {
    	FileReader reader=null;
    	BufferedReader buffer=null;
    	PrintWirter out=null;
    	
    	try{
    		reader=new Filereader("input.txt");
    		buffer=new BufferedReader(reader);
    		out=new PrintWriter("OUTPUT.txt");
    		
    		NodeStack <String> stack=new NodeStack(); 
    		
    		String sequenze="";
    		
    		while((sequenze=buffer.readLine())!=null)
    			stack.push(sequenze);
    			
    			for(Node node=new Node(); node.getNext()!=null; node=node.getNext())
    			{
    				boolean parentesizzata=false;
    				String element=node.getElement();
    				
    				for(int i=0; i<element.length(); i++)
    				{
    					if(
    						(element.charAt(i)=="(" && element.charAt(element.length()-1-i)==")") || 
    						(element.charAt(i)=="{" && element.charAt(element.length()-1-i)=="}")
    					||(element.charAt(i)=="[" && element.charAt(element.length()-1-i)=="]")
    					||(element.charAt(i)=="<" && element.charAt(element.length()-1-i)==">"))
    					
    					parentesizzata=true;
    					
    				
    					else
    					{
    						for(int j=0; j<element.length()-1; j++)
    						{
    							if(
    							(element.charAt(j)=="(" && element.charAt(j+1)==")") || 
    							(element.charAt(j)=="{" && element.charAt(j+1)=="}")
    							||(element.charAt(j)=="[" && element.charAt(j+1)=="]")
    							||(element.charAt(j)=="<" && element.charAt(j+1)==">"))
    					
    							parentesizzata=true;
    							
    						}
    						
    						i=element.length()-1;
    					}
    				}
    				
    				if(parentesizzata==true)
    					out.print("OK");
    				else out.print("ERRORE");
    				
    			}
    		}
    		
    		finally{
    			
    				if(reader!=null)reader.close();
    			
    				if(out!=null)out.close();
    			}
    }						
    }
    Gli errori gią partono per l'interfaccia, che mi dice deve essere dichiarata a parte, e anche la classe Nodo, ma perchč mi dą quest'errore?

  2. #2
    Il file non viene compilato a causa della marea di errori che ci sono. Se vuoi scoprirli devi per forza mettere ogni classe nel suo file .java, cosģ fai ordine.
    Alcuni errori sono:


    Ritorni un E e non un Node<E> (element č un E):
    codice:
    public Node <E> getElement() {return element;}
    public Node <E> getNext() {return next;}

    element, essendo un E, non ha il metodo getNext:
    codice:
    public void setNext(Node <E> e){element.getNext()=e;}
    Questi non esistono:
    codice:
    PrintWirter
    Filereader
    Metti ordine, correggi gli errori di battitura e ricordati di intercettare le eccezioni.
    Ti potrebbe convenire usare un IDE comunque, se non hai voglia di trovarti da solo gli errori.


  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non č questione di ordine, č questione di rispettare le regole previste da Java: ogni classe o interfaccia che sia dichiarata public deve stare dentro ad un file .java con lo stesso nome della classe o dell'interfaccia.

    Capitolo 1 di qualunque libro su Java.


    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

  4. #4
    Ah bene, al momento ho risolto non mettendole public.
    Ma eventualmente dovrei dichiarare ogni classe in un file separato giusto?

    Per esempio:

    codice:
     public interface Stack<E>{
    .
    .
    .
    Salvata come?
    Stack.java?

    E poi per usarle basta che sono tutte nella stessa cartella e le importo nel main?
    cosa scrivo..semplicemente:

    codice:
    import Stack
    import Altreclassi
    ?

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Darčios89
    E poi per usarle basta che sono tutte nella stessa cartella e le importo nel main?
    cosa scrivo..semplicemente:

    codice:
    import Stack
    import Altreclassi
    ?
    Se sono nello stesso package non serve usare import.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    Ok...bč..vedrņ di provare questa cosa in un secondo momento, ho cercato di aggiustare il mio programma, mi dą solo un problema, che credo dipenda dai generics:

    codice:
    import java.io.*;
    
    interface Stack <E>
    {
    	public int size();
    	//Return numero elementi
    	
    	public boolean isEmpty();
    	//Return true se lo stack č vuoto
    	
    	public void push(E object);
    	//Pone in cima allo stack un elemento
    	
    	public E pop(); 
    	//Elimina l'elemento in cima allo stack e lo restituisce
    	
    	public E top(); 
    	//Indica qual č l'elemento in cima allo stack senza estrarlo
    	
    }
    
    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 Node <E> getNext() {return next;}
    
    	public void setElement(E object){ element=object;}
    	
    	public void setNext(Node <E> e){next=e;}
    }
    
    class EmptyStackException extends RuntimeException{
    	public EmptyStackException(String err){
    		super(err);
    	}
    }
    
    class NodeStack <E> implements Stack <E> {
    	
    	private Node <E> top;
    	private int size;
    	
    	public NodeStack()
    	{
    		top=null;
    		size=0;
    	}
    	
    	public int size() {return size;}
    	
    	public boolean isEmpty(){return (top==null);}
    	
    	public void push(E element){
    		Node <E> n=new Node <E>(element,top);
    		top=n;
    		size++;
    	}
    	
    	public E pop() throws EmptyStackException {
    		if(isEmpty()) throw new EmptyStackException("Stack vuoto.");
    		E object=top.getElement();
    		top=top.getNext();
    		size--;
    		return object;
    	}
    	
    	public E top() throws EmptyStackException
    	{
    		if(isEmpty()) throw new EmptyStackException("Stack vuoto");
    		return top.getElement();
    	}
    	
    }
    
    public class EsercizioI{
    
    
    public static void main(String []args) throws IOException
    {
    	FileReader reader=null;
    	BufferedReader buffer=null;
    	PrintWriter out=null;
    	
    	try{
    		reader=new FileReader("input.txt");
    		buffer=new BufferedReader(reader);
    		out=new PrintWriter("OUTPUT.txt");
    		
    		NodeStack <String> stack=new NodeStack(); 
    		
    		String sequenze="";
    		int numero=0;
    		
    		while((sequenze=buffer.readLine())!=null)
    		{
    			stack.push(sequenze);
    			numero++;
    		}
    			
    				
    				while(stack.isEmpty()!=true)
    				{
    					
    					boolean parentesizzata=false;
    					String element=(String)stack.top();
    				
    					
    					for(int i=0; i<element.length(); i++)
    					{
    					
    					if(
    						(element.charAt(i)=='(' && element.charAt(element.length()-1-i)==')') || 
    						(element.charAt(i)=='{' && element.charAt(element.length()-1-i)=='}')
    					||(element.charAt(i)=='[' && element.charAt(element.length()-1-i)==']')
    					||(element.charAt(i)=='<' && element.charAt(element.length()-1-i)=='>'))
    					
    					parentesizzata=true;
    					
    				
    					else
    					{
    						for(int j=0; j<element.length()-1; j=j+2)
    						{
    							if(
    							(element.charAt(j)=='(' && element.charAt(j+1)==')') || 
    							(element.charAt(j)=='{' && element.charAt(j+1)=='}')
    							||(element.charAt(j)=='[' && element.charAt(j+1)==']')
    							||(element.charAt(j)=='<' && element.charAt(j+1)=='>'))
    					
    							parentesizzata=true;
    							
    						}
    						
    						i=element.length()-1;
    					}
    					
    					}
    					
    					stack.pop();
    				
    				
    					if(parentesizzata==true)
    					out.print("OK");
    					else out.print("ERRORE");
    				}
    				
    		}
    		
    		
    		finally{
    			
    				if(reader!=null)reader.close();
    			
    				if(out!=null)out.close();
    			}
    }						
    }
    L'errore č:

    codice:
    Note: EsercizioI.java uses unchecked or unsafe operations.
    Note: Recompile with -Xlint:unchecked for details.
    >Exit code: 0

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Darčios89
    codice:
    Note: EsercizioI.java uses unchecked or unsafe operations.
    Note: Recompile with -Xlint:unchecked for details.
    >Exit code: 0
    NodeStack <String> stack=new NodeStack<String>();

    Da aggiungere la parte in rosso.
    Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Darčios89
    L'errore č:

    codice:
    Note: EsercizioI.java uses unchecked or unsafe operations.
    Note: Recompile with -Xlint:unchecked for details.
    >Exit code: 0
    Non č un errore, ma un warning. C'č una bella differenza
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  9. #9
    Ah bene....si una distrazione....ti ringrazio.
    Bene di funzionare funziona, nel senso che scrive qualcosa
    Perņ non come dovrebbe, praticamente nell'esercizio si dice:

    codice:
    Si realizzi un'implementazione dell'interfaccia Stack<E> (come mostrato a lezione)
    e si utilizzi la classe ottenuta per la realizzazione del seguente problema legato alle
    sequenza parentesizzate.
    Una sequenza S si dice parentesizzata se
    – č formata da una coppia di parentesi, una aperta e l'altra chiusa.
    Esempio: S = ( )
    – č la concatenazione di due sequenze parentesizzate, S1 ed S2.
    Esempio: S1 S2
    – č data da una sequenza parentesizza, S, racchiusa tra parentesi
    Esempio: ( S )
    Si fornisca un programma Java che prenda in input un file di testo contenente una
    lista di sequenze di parentesi, una per riga, e permetta di controllare se tali
    sequenze siano delle sequenza parentesizzate.
    Input
    Il file di input contiene una sequenza di sequenze, una per riga, terminanti con il
    simbolo “ ;” (punto e virgola). Ciascuna sequenza contiene una lista di simboli di
    parentesi tra: (, [, {, < >, }, ], )
    Output
    il file di output contiene una riga per ogni sequenza di input. La riga contiene la
    stringa 'Ok' se la relativa sequenza č parentesizzata, altrimenti contiene la stringa
    'Errore'.
    Ora io ho fatto un controllo, ma non credo che funzioni perchč l'output stampa sempre ok,
    il mio controllo č stato vedere se nella stringa ci fossero le stesse parentesi agli estremi, cioč indice 0 con l'ultimo indice della stringa, poi il secondo con il penultimo e cosģ via.
    Se la condizione non č verificata faccio un altro controllo secondo cui devo trovare parentesi aperta e chiusa passando da indice ad indice....

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Darčios89
    Bene di funzionare funziona, nel senso che scrive qualcosa
    Perņ non come dovrebbe
    Non ho letto tutta la parte di gestione di quei file che fai nel main() ma da una veloce prova del tuo codice mi pare che lo stack funzioni bene.

    codice:
    NodeStack<String> stack = new NodeStack<String>();
    
    stack.push("One");
    stack.push("Two");
    stack.push("Three");
    
    System.out.println(stack.size());
    System.out.println(stack.pop());
    System.out.println(stack.size());
    System.out.println(stack.pop());
    System.out.println(stack.size());
    System.out.println(stack.pop());
    System.out.println(stack.size());
    
    try {
        stack.pop();
    } catch (EmptyStackException e) {
        System.out.println("Corretto ... essendo vuoto!");
    }
    Output:
    3
    Three
    2
    Two
    1
    One
    0
    Corretto ... essendo vuoto!


    Il che bene o male prova che almeno a livello basilare lo stack funziona come dovrebbe.
    Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet

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.