Pila in Java

Black27
Buondì! :-D da poco tempo ho iniziato ad applicarmi a java...ma essendo abituato a programmare in c++, ho trovato qualche difficoltà! Arrivando al succo, praticamente ho provato a implementare una pila in java tanto per fare una prova (quindi non fateci caso se è molto scarna e mancano return...era solo per vedere se riuscivo a farla andare) e il fatto è che mi dà errore! Quindi vi chiedo un paio di cosette: :-D

1) essendo un "neofita" del java, sbaglio qualcosa nello stile di programmazione? cioè scrivo cose strane e inusuali?
2) mi da errore quando accedo a push...cosa c'è di sbagliato? ho provato in diversi modi, ma ahimè non ce la faccio :roll:

Vi ringrazio, e mi scuso già in anticipo per le mostruosità che avrò scritto :?

Ecco il codice:


import java.util.Scanner;
import java.lang.String;

class Pila {

int size;
int index;
int elem[];

final int maxDim = 5;

Pila() {
size = maxDim;
index = 0;
int elem[] = new int[size]; //l'errore me lo dà qui!!
}

public void push(int n) {
if(index==maxDim)
System.out.println("Dimensione massima raggiunta!");
else
this.elem[index++] = n;
}

public void pop() {
if(index==0)
System.out.println("Pila vuota!");
else
--index;
}

public void top() {
if(index==0)
System.out.println("Pila vuota!");
else
System.out.println("Top: " + elem[0]);
}

public void print() {
if(index!=0) {
for(int i=0; i System.out.print(elem + " ");
System.out.println();
}
}
}

public class MainPila {

public static void main(String[] args) {
Pila x = new Pila();
int n;
char ch = 'a';
String temp;
Scanner scannerIO = new Scanner(System.in);

while(ch!='e') {
System.out.println("pop (o)");
System.out.println("push (u)");
System.out.println("top (t)");
System.out.println("print (p)");
System.out.println("end (e)");

temp = scannerIO.nextLine(); // è giusto fare così per l'input?
ch = temp.charAt(0);

switch(ch) {
case 'o': x.pop(); break;
case 'u':
System.out.println("Val? "); n=scannerIO.nextInt(); x.push(n); // è giusto fare così per l'input?
break;
case 't': x.top(); break;
case 'p': x.print(); break;
default: System.out.println("Errore!"); break;
}
}
}
}

Risposte
xsl
"Black27":

class Pila {

int size;
int index;
int elem[];

final int maxDim = 5;

Pila() {
size = maxDim;
index = 0;
int elem[] = new int[size]; //l'errore me lo dà qui!!
}

La runtime exception non viene sollevata lì, bensì quando vai ad invocare su una istanza di Pila il metodo push.
Ciò è dovuto al fatto che nel costruttore l'istanziazione dell'array si riferisce alla variabile locale elem, in quanto definita, e non al campo di istanza.

Poi, dal punto di vista stilistico la variabile size non serve, in quanto hai già la costante che tra l'altro andrebbe scritta completamente in maiuscolo.

Black27
"xsl":
[quote="Black27"]
class Pila {

int size;
int index;
int elem[];

final int maxDim = 5;

Pila() {
size = maxDim;
index = 0;
int elem[] = new int[size]; //l'errore me lo dà qui!!
}

La runtime exception non viene sollevata lì, bensì quando vai ad invocare su una istanza di Pila il metodo push.
Ciò è dovuto al fatto che nel costruttore l'istanziazione dell'array si riferisce alla variabile locale elem, in quanto definita, e non al campo di istanza.

Poi, dal punto di vista stilistico la variabile size non serve, in quanto hai già la costante che tra l'altro andrebbe scritta completamente in maiuscolo.[/quote]

Grazie della risposta! Quindi come posso risolvere l'errore? :oops:

xsl
"Black27":

Grazie della risposta! Quindi come posso risolvere l'errore? :oops:

Al posto di
int elem[] = new int[size];

ci metti
elem = new int[size];

Black27
"xsl":
[quote="Black27"]
Grazie della risposta! Quindi come posso risolvere l'errore? :oops:

Al posto di
int elem[] = new int[size];

ci metti
elem = new int[size];
[/quote]

Perfetto ora funziona, grazie :-D c'era un altro errore, dovevo mettere

Scanner scannerIO = new Scanner(System.in);

all'interno del ciclo while! Ora funziona, grazie mille!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.