PDA

View Full Version : [Java] Programmino


The Puppet Master
10-11-2007, 19:01
Salve gente, sono alle prime armi con Java...
questo programma mi da problemi e non riesco proprio a capire perchè...
Ho creato un proggetto ci ho messo dentro 2 classi in 2 file: il main
e la classe PrimaClasse(che fantasia è?).


public class PrimaClasse {
int x;
String pippo;
void stampa(int c)
{ System.out.println(+x);System.out.println(+ c);};
void stampaChar(String a)
{System.out.println( pippo); System.out.println(a);};
static void stampaIntero(int k)
{System.out.println("random ="+k);};
}





Questo è il main


import java.util.*;


public class Main1 {
public static void main(String args[])

{
int k;

Random rand = new Random();

k = rand.nextInt(100)+1;

stampaIntero(k);

PrimaClasse p = new PrimaClasse();
p.x=19;
p.stampa(2);
p.pippo = "ciao";
p.stampaChar("stronzo");
}
}

L'ERRORE : cannot find symbolmethod stampaIntero( int)


so che è una stupidaggine ma non riesco proprio a venirne a capo...

ndakota
10-11-2007, 19:11
public class PrimaClasse {
int x;
String pippo;
void stampa(int c)
{ System.out.println(+x);System.out.println(+ c);}qui;
void stampaChar(String a)
{System.out.println( pippo); System.out.println(a);}qui;
static void stampaIntero(int k)
{System.out.println("random ="+k);}qui;
}




sei sicuro ci vadano quei ;? prova a toglierli..

D3stroyer
10-11-2007, 19:18
... non hai creato un oggetto della classe.

PrimaClasse oggetto = new PrimaClasse();
oggetto.stampaIntero(k);

edit: visto ora..l'hai creato..basta che sposti p.stampaIntero(k); sotto la creazione di p

Bello il "ciao stronzo"

The Puppet Master
10-11-2007, 19:20
... non hai creato un oggetto della classe.

PrimaClasse oggetto = new PrimaClasse();
oggetto.stampaIntero(k);

edit: visto ora..l'hai creato..basta che sposti p.stampaIntero(k); sotto la creazione di p

eheh ma io mi sono fatto una funzione static di proposito in modo da non dover sempre implementare l'oggetto per poi stampare.
Il giochetto è : ho una funzione printf se dichiaro una funzione stampa di tipo static

The Puppet Master
10-11-2007, 19:21
sei sicuro ci vadano quei ;? prova a toglierli..

nono senza i ";" mi da un casino di errori:D

D3stroyer
10-11-2007, 19:22
mmm, una funzione dentro un oggetto può essere richiamata senza un oggetto?

a me non sembra sensata come cosa.

The Puppet Master
10-11-2007, 19:45
mmm, una funzione dentro un oggetto può essere richiamata senza un oggetto?

a me non sembra sensata come cosa.

è una funzione static, praticamente è al di fuori degli oggetti ti copio un codice preso da un manuale in cui fa la stessa cosa :D

import com.bruceeckel.simpletest.*;
import java.util.*;

public class MathOps {
static Test monitor = new Test();
// Shorthand to print a string and an int:
static void printInt(String s, int i) {
System.out.println(s + " = " + i);
}
// Shorthand to print a string and a float:
static void printFloat(String s, float f) {
System.out.println(s + " = " + f);
}
public static void main(String[] args) {
// Create a random number generator,
// seeds with current time by default:
Random rand = new Random();
int i, j, k;
// Choose value from 1 to 100:
j = rand.nextInt(100) + 1;
k = rand.nextInt(100) + 1;
printInt("j", j); printInt("k", k);
i = j + k; printInt("j + k", i); /* <---- è qui che fa la stessa cosa:D*/
i = j - k; printInt("j - k", i);
i = k / j; printInt("k / j", i);
i = k * j; printInt("k * j", i);
i = k % j; printInt("k % j", i);
j %= k; printInt("j %= k", j);
// Floating-point number tests:
float u,v,w; // applies to doubles, too
v = rand.nextFloat();
w = rand.nextFloat();
printFloat("v", v); printFloat("w", w);
u = v + w; printFloat("v + w", u);
u = v - w; printFloat("v - w", u);
u = v * w; printFloat("v * w", u);
u = v / w; printFloat("v / w", u);
// the following also works for
// char, byte, short, int, long,
// and double:
u += v; printFloat("u += v", u);
u -= v; printFloat("u -= v", u);
u *= v; printFloat("u *= v", u);
u /= v; printFloat("u /= v", u);
monitor.expect(new String[] {
"%% j = -?\\d+",
"%% k = -?\\d+",
"%% j \\+ k = -?\\d+",
"%% j - k = -?\\d+",
"%% k / j = -?\\d+",
"%% k \\* j = -?\\d+",
"%% k % j = -?\\d+",
"%% j %= k = -?\\d+",
"%% v = -?\\d+\\.\\d+(E-?\\d)?",
"%% w = -?\\d+\\.\\d+(E-?\\d)?",
"%% v \\+ w = -?\\d+\\.\\d+(E-?\\d)??",
"%% v - w = -?\\d+\\.\\d+(E-?\\d)??",
"%% v \\* w = -?\\d+\\.\\d+(E-?\\d)??",
"%% v / w = -?\\d+\\.\\d+(E-?\\d)??",
"%% u \\+= v = -?\\d+\\.\\d+(E-?\\d)??",
"%% u -= v = -?\\d+\\.\\d+(E-?\\d)??",
"%% u \\*= v = -?\\d+\\.\\d+(E-?\\d)??",
"%% u /= v = -?\\d+\\.\\d+(E-?\\d)??"
});
}
} ///:~

HiroNakamura
10-11-2007, 20:04
è una funzione static,


ok è static, significa che non è necessario creare un oggetto ma comunque per invocarla devi scrivere:


PrimaClasse.stampaIntero(k);

Così si invoca!
Se poi ancora non va, vuol dire che l'intero oggetto deve essere di tipo static per fornire metodi static all'esterno...ma questo non lo ricordo bene. Se non va come ho detto sopra prova a dichiarare static tutta la classe PrimaClasse

D3stroyer
10-11-2007, 20:21
è una funzione static, praticamente è al di fuori degli oggetti ti copio un codice preso da un manuale in cui fa la stessa cosa :D



veramente non è proprio la stessa cosa, io vedo un annidamento di classi che non c'è nel tuo programma. Ripeto, secondo me sarebbe insensato funzionasse come l'hai scritto tu mentre nell'esempio non lo trovo strano essendo un annidamento.

Si, effettivamente ha ragione Hiro.

The Puppet Master
11-11-2007, 01:43
veramente non è proprio la stessa cosa, io vedo un annidamento di classi che non c'è nel tuo programma. Ripeto, secondo me sarebbe insensato funzionasse come l'hai scritto tu mentre nell'esempio non lo trovo strano essendo un annidamento.

Si, effettivamente ha ragione Hiro.

guarda a me sembra la stessa cosa perchè nella classe dichiara un metodo static per stampare NUMERI NON ATTRIBUTI DI OGGETTI.
poi nel main usa quei metodi(stampaInt etc) senza la dot notation in quanto i metodi static non sono istanza di oggetti.

wingman87
11-11-2007, 02:19
Non è la stessa cosa perchè nel tuo esempio il metodo richiamato si trova nella stessa classe del metodo che lo richiama. Ha ragione Hiro

HiroNakamura
11-11-2007, 09:29
Ha ragione Hiro

ah...ma allora qualcuno mi ha letto :D
Ho dato la soluzione, ma The Puppet non ha detto se l'ha letta, l'ha provata, ecc...
Era abbastanza semplice, e comunque si tratta di nozioni base di java, e non vedo il motivo per cui dobbiate disquisire sull'argomento :) si fa così e basta :D :D :D

p.s.: un po' di teoria a volte fa bene...

@The Puppet
p.p.s: con tutto quello che vuoi... ma è improponibile chiamare un metodo di una classe esterna a crudo, senza far riferimento a quale classe appartiene

Tadde
11-11-2007, 11:11
La notazione "NomeClasse.chiamataMetodo()" per i metodi statici è indispensabile affinché il compilatore possa distinguere quale metodo si sta invocando nel caso in cui lo stesso nome di metodo ( chiamataMetodo() ) fosse implementato in maniera statica in due classi diverse, come ad esempio NomeClasse1 e NomeClasse2.
Se tu invocassi : chiamataMetodo() senza specificare di quale classe come farebbe il compilatore a capire a quale ti stai riferendo?

The Puppet Master
11-11-2007, 13:03
La notazione "NomeClasse.chiamataMetodo()" per i metodi statici è indispensabile affinché il compilatore possa distinguere quale metodo si sta invocando nel caso in cui lo stesso nome di metodo ( chiamataMetodo() ) fosse implementato in maniera statica in due classi diverse, come ad esempio NomeClasse1 e NomeClasse2.
Se tu invocassi : chiamataMetodo() senza specificare di quale classe come farebbe il compilatore a capire a quale ti stai riferendo?

ma certo ci va il nome della classe prima:D
grazie Tadde , scusa Hiro non avevo capito:D
ora ho messo il nome della classe prima del metodo e non mi da errori quando compilo il file però...
quando metto compile project mi dice :
there are no source files which require to be compiled

Scusate se sto sempre qui a chiedere ma non so a chi altro rivolgermi:D

^TiGeRShArK^
13-11-2007, 17:11
ehmmm..
hai la sign *lievemente* irregolare mi sa :stordita:

AnonimoVeneziano
13-11-2007, 17:49
ehmmm..
hai la sign *lievemente* irregolare mi sa :stordita:

:asd: