PROBLEMA Costruttore java

matteoqwerty

Nuovo Utente
1
0
Ciao a tutti,
sto cercando di capire bene i costruttori: ho capito che un costruttore deve inizializzare gli oggetti, non ritornano niente e hanno lo stesso nome della classe. Facendo un esercizio, mi è stato dato un metodo e mi si richiede di creare il costruttore per questo metodo.
Codice:
private void buildTable (Node root) {
  FrameStack = new FrameStack();
  stack.push(new Frame(root,""));

  while (!stack.empty() ){
      Frame current = stack.top();
      Node n = current.node();
      String code = current.code();
      if (n.isLeaf() ) {
        codes [n.character() ] = code;
      }else{
       stack.push(new Frame(n.right(),code+"1"));
       stack.push(new Frame(n.left(),code+"1")); }} }

Quindi devo implementare il costruttore FrameStack() , ei metodi boolean empty() , void push(Frame n), Frame top() e void pop().

Io ho provato facendo cosi:
Codice:
Public class FrameStack {
   private int stack [];
   private int top;
   public FrameStack() {
     stack = new int [];
     top = 0; } //costruttore
   
  public voi push (Frame n) {
    stack[top] = n;
    top++; }
  public void pop(){ 
    top--; }
  public boolean empty(){
   if (top == 0);  {return true;} }

  public int Frame top() {
     return stack[top];}}

volevo chiedere se secondo voi ho sbagliato. Se qualcuno potrebbe aiutarmi gli sarei grato.
Grazie in anticipo.
Ciao
 
Ultima modifica:

1nd33d

Utente Attivo
653
279
CPU
Intel i5 3570K @ 4,5Ghz
Dissipatore
Scythe Mugen 2
Scheda Madre
Gigabyte Z77X-UD3H
HDD
Samsung 840 PRO 256GB + Sandisk Ultra 250GB + Sandisk Plus 960GB
RAM
2x8GB Crucial Ballistix Tactical @2000Mhz CL9
GPU
XFX RX480 GTR Black Edition
Audio
Auzentech X-Fi Forte
Monitor
AOC i2369VW
PSU
Seasonic P660
Case
eh?
Periferiche
Razer Naga HEX v2
OS
Windows 10 64bit - Linux Mint 18
Ci sono diversi errori:
- "public" va con la "p" minuscola. Si è una banalità, ma ho visto professori bocciare all'esame per cose del genere.
- nel costruttore devi specificare la dimensione dello stack, per esempio 10: stack = new int[10]
- nel metodo push stai cercando di inserire un oggetto di tipo Frame in un array di valori int, non va bene. O l'array lo fai di oggetti Frame (penso sia quello che devi fare), oppure al metodo push devi passare un int.
- il metodo pop() deve ritornare il valore (l'operazione pop di uno stack lo prevede), per cui devi scrivere, se usi elementi int:
Codice:
public int pop(){
   return stack[--top];
}
- nel metodo empty (sarebbe meglio isEmpty), hai messo un punto e virgola di troppo: quello dopo la parentesi dell'if, e non prevedi il ritorno di false se lo stack non è pieno.

Se volessi, come il nome della classe suggerisce, creare uno stack di oggetti "Frame":
Codice:
public class FrameStack {
    int top;
    Frame[] stack;
    
    public FrameStack(){   //no size specificato, stack da 20
        stack = new Frame[20];
        top = 0;
    }
    
    public FrameStack(int size){
        stack = new Frame[size];
        top = 0;
    }

    public void push( Frame n){
        if (top < stack.length)
            stack[top++] = n;    //inserisci elemento e postincremento di top
    }

    public Frame pop(){
        if (top > 0)
            return stack[--top];    //predecremento di top e return dell'elemento
        return null;   //se lo stack è vuoto ritorna null
    }

    public Frame top(){
        if (top > 0)
           return stack[top-1];   //ritorna l'elemento in cima senza rimuoverlo (senza decrementare top)
        return null;
    }

    public boolean isEmpty(){ 
        if (top < 1)
           return true;   //true se vuoto
        return false;   //false se top>0
    }

}//class

Non è assolutamente uno stack completo di tutte le funzioni, ma già è un inizio.
Ti consiglio di provare i codici con un compilatore (a quest'ora potrei aver scritto qualcosa di strano :asd: )
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili