PDA

View Full Version : [Java] Chiarimenti


osvit
25-10-2001, 23:37
Sono alle prime armi con questo linguaggio e non mi è molto chiara una cosa:

_La dichiarazione public static void main(String[] args) cosa fa di preciso??

_Che differenza cè tra scrivere (String[] args) e (String a[])?

alexmaz
25-10-2001, 23:49
Dichiara come parametro del metodo main un array di stringhe; in questo caso l'array è formato dai parametri passati alla riga di comando dopo il nome della classe che vuoi eseguire.

fra string[] args e string args[] in java non c'è nessuna differenza, è sempre un array di stringhe, scritto con due notazioni diverse.

osvit
26-10-2001, 00:10
Grazie per la risposta;)

Quindi se non ho capito male viene dichiarata la gestione di array di stringhe(args) della classe String attraverso il metodo main.
Void è un valore di ritorno ed indica che il metodo nn restituisce alcun valore.

Speriamo di aver capito giusto:rolleyes:

alexmaz
26-10-2001, 01:47
Allora:

public indica che il metodo è pubblico, quindi accessibile fuori dalla classe, static indica che è un metodo di classe cioè che viene invocato per conto di una classe intera e non per un'istanza della classe, void indica che il metodo non restituisce alcun valore e args è un array di oggetti della classe String, quindi di stringhe.

Ciao

cat78
26-10-2001, 12:03
Originariamente inviato da osvit
[B]...
_La dichiarazione public static void main(String[] args) cosa fa di preciso??
...?


In ogni programma java (ad eccezzione delle applet) deve esserci un metodo main pubblico. Altrimenti il prog non può girare.

Per il resto ha già detto tutto alexmaz ;)

Sephirot
26-10-2001, 17:06
Originariamente inviato da alexmaz
[B]Allora:

public indica che il metodo è pubblico, quindi accessibile fuori dalla classe, static indica che è un metodo di classe cioè che viene invocato per conto di una classe intera e non per un'istanza della classe, void indica che il metodo non restituisce alcun valore e args è un array di oggetti della classe String, quindi di stringhe.

Ciao

si vede che sto ragazzo a preso 30

eheh vedete la statale di Milano come ci prepara bene :D :) ;)

alexmaz
26-10-2001, 17:08
Originariamente inviato da Sephirot
[B]

si vede che sto ragazzo a preso 30

eheh vedete la statale di Milano come ci prepara bene :D :) ;)

:D :D :D

Ciao :)

osvit
27-10-2001, 10:37
Grazie per l'auito, se avrò qualche altro dubbio saprò a chi rivolgermi;)

ciao ciao:)

gaia86
23-11-2007, 14:25
ciao a tutti, ho un problema nel momento in cui mando in compilazione un programma.. qualcuno mi saprebbe dire come risolvere questo problema?? mi esce nel prompt dei comandi dopo aver digitato javac nomeclasse.java l'errore
nomeclasse.java:3:package system does not exist
system.out.println ("Primo programma");

1 error

aspetto risposta da qualcuno.grazie mille!!!

banryu79
23-11-2007, 15:02
ciao a tutti, ho un problema nel momento in cui mando in compilazione un programma.. qualcuno mi saprebbe dire come risolvere questo problema?? mi esce nel prompt dei comandi dopo aver digitato javac nomeclasse.java l'errore
nomeclasse.java:3:package system does not exist
system.out.println ("Primo programma");

1 error

aspetto risposta da qualcuno.grazie mille!!!

Scrivi System.out.println("..."), non system.out.println("...") e vedrai che funziona... ;)

In pratica, l'errore è causato dal fatto che scrivendo system con la prima lettera in minuscolo, il compiler pensa che si tratti del nome di un package e tenta di risolverlo ma ovviamente non trova nulla perchè tale package non esiste.

Più precisamente quando scrivi un qualsiasi file .java, ricordati che oltre ai package che puoi importare tu con la keyword "import" il compiler automaticamente importa il pakage "java.lang" e quindi puoi fare riferimento a tutte le classi/interfacce li dentro dichiarate direttamente con il nome della classe.

Ti dico questo perchè la classe System che stai usando la puoi usare appunto chiamandola direttamente "System" invece che "java.lang.System" proprio perchè il compiler importa "java.lang" automaticamente.
E scrivendo "system" il compiler pensa che sia il nome di un package, non di una classe.

Ciao :)

Perry_Rhodan
23-11-2007, 15:04
si vede che sto ragazzo ha preso 30

eheh vedete la statale di Milano come ci prepara bene :D :) ;)

non si può dire lo stesso della scuola elementare :O :D

naturalmente scherzo :) ,scusa , è che la battuta mi è venuta spontanea ;)

ndakota
23-11-2007, 16:02
si vede che sto ragazzo a preso 30

eheh vedete la statale di Milano come ci prepara bene :D :) ;)

tra due anni vi raggiungo :Prrr:

PGI-Bis
23-11-2007, 21:03
Allora:

public indica che il metodo è pubblico, quindi accessibile fuori dalla classe, static indica che è un metodo di classe cioè che viene invocato per conto di una classe intera e non per un'istanza della classe, void indica che il metodo non restituisce alcun valore e args è un array di oggetti della classe String, quindi di stringhe.

Ciao

La terza è giusta.

gaia86
23-11-2007, 22:00
Scrivi System.out.println("..."), non system.out.println("...") e vedrai che funziona... ;)

In pratica, l'errore è causato dal fatto che scrivendo system con la prima lettera in minuscolo, il compiler pensa che si tratti del nome di un package e tenta di risolverlo ma ovviamente non trova nulla perchè tale package non esiste.

Più precisamente quando scrivi un qualsiasi file .java, ricordati che oltre ai package che puoi importare tu con la keyword "import" il compiler automaticamente importa il pakage "java.lang" e quindi puoi fare riferimento a tutte le classi/interfacce li dentro dichiarate direttamente con il nome della classe.

Ti dico questo perchè la classe System che stai usando la puoi usare appunto chiamandola direttamente "System" invece che "java.lang.System" proprio perchè il compiler importa "java.lang" automaticamente.
E scrivendo "system" il compiler pensa che sia il nome di un package, non di una classe.

Ciao :)




GRAZIE MILLE PER AVERMI RISPOSTO ED AVERMI SPIEGATO.. ADESSO FUNZIONA... CIAOOOO!!

gaia86
24-11-2007, 12:23
CIAO A TUTTI POTETE DIRMI COSA C'è DI SBAGLIATO IN QUESTA ISTRUZIONE?
class Stringa{
public static void main (String agrs[]){

String s = SavitchIn.readLineWord();
if (s.length()>10 && s.charAt(0)==‘T’ | s.charAt(0)==‘t’ ){
System.out.println( “Lunghezza più di 10 e inizia con T o t”);
if (s.charAt(0)==‘T’ )
System.out.println(s.length());
} else
if (s.length()<=10 && s.charAt(0)!=‘T’ && s.charAt(0)!=‘t’) )
System.out.println( “Nessuna condizione verificata”);
else
if (s.length()>10)
System.out.println( “Lunghezza più di 10”);
else
System.out.println( “Inizia con T o t”);
}
}

QUANTO LO MANDO IN COMPILAZIONE MI DA 21 ERRORI.. HELP ME... THANK YOU!!

21-5-73
24-11-2007, 12:51
Se lo stai compilando con javac, dovrebbe segnalarti quali sono gli errori.

banryu79
25-11-2007, 12:55
if (s.length()>10 && s.charAt(0)==‘T’ | s.charAt(0)==‘t’ ) {

....System.out.println( “Lunghezza più di 10 e inizia con T o t”);
....if (s.charAt(0)==‘T’ ) {
........System.out.println(s.length());
....} else
....if (s.length()<=10 && s.charAt(0)!=‘T’ && s.charAt(0)!=‘t’) ) {
........System.out.println( “Nessuna condizione verificata”);
...
eccetera

Come prima cosa:
controlla la condizione nel primo if, quello iniziale... Leggila bene, sei sicura che il controllo sia come lo vuoi?

Io leggo:
<<torna vero se la lunghezza di "s" è maggiore di 10 E il primo carattere inizia per 'T' (prima possibilità) OPPURE se il primo carattere inizia per 't' (altra possibilità)>>

Invece credo che tu voglia questa logica:
<<torna vero se la lunghezza di "s" è maggiore di 10 E il primo carattere inizia per 'T' oppure per 't' (unica possibilità)>>

Indizio... mancano delle parantesi ;)

Per quanto riguarda gli errori di compilazione leggi che cosa ti restituisce il compilatore... e mettiti in caccia.
Sempre in quel if, comunque, volevi usare l'operatore logico OR "||" ma hai scritto (o copia/incollato :D) "|" che è l'operatore OR bit a bit...


Cmq io nel primo if cambierei anche:
s.charAt(0)==‘T’ | s.charAt(0)==‘t’ (che comq è errato e da correggere, vedi sopra)
con:
s.subString(0,1).equalsIgnoreCase"T"
(subString(...) torna una String generata da s contente solo il primo carattere e su questa equalsIgnoreCase(...) torna TRUE se la stringa è uguale a quella passata in argomento senza tenere conto delle maiuscole e minuscole) ma questo è solo a gusto mio.

E sempre a mio gusto metterei sempre le parentesi {} negli if... else if anche se non neccessarie, per aumentare la leggibilità del codice ed evitare errori accidentali (si tratta di scelte di stile e di gusti/abitudini personali però ;)).

Ciao :)

dupa
25-11-2007, 14:31
CIAO A TUTTI POTETE DIRMI COSA C'è DI SBAGLIATO IN QUESTA ISTRUZIONE?
class Stringa{
public static void main (String agrs[]){

String s = SavitchIn.readLineWord();
if (s.length()>10 && s.charAt(0)==‘T’ | s.charAt(0)==‘t’ ){
System.out.println( “Lunghezza più di 10 e inizia con T o t”);
if (s.charAt(0)==‘T’ )
System.out.println(s.length());
} else
if (s.length()<=10 && s.charAt(0)!=‘T’ && s.charAt(0)!=‘t’) )
System.out.println( “Nessuna condizione verificata”);
else
if (s.length()>10)
System.out.println( “Lunghezza più di 10”);
else
System.out.println( “Inizia con T o t”);
}
}

QUANTO LO MANDO IN COMPILAZIONE MI DA 21 ERRORI.. HELP ME... THANK YOU!!

usa Eclipse o un IDE più intelligente.. ti evita molti casini e ti semplifica il lavoro.

ciao

gaia86
26-11-2007, 17:42
GRAZIE MILLE PER LE TUE RISPOSTE ALQUANTO CHIARE!!TI VOLEVO CHIEDERE UNA COSA PER FAR LEGGERE LA CLASSE SAVITCHIN COME POSSO FARE?

public class Ciao {
public static void main(String args[]) {
System.out.print("Come ti chiami ? " );
String nome = SavitchIn.readLine();
System.out.print("Ciao ");
System.out.println(nome);
}
}

QUESTO ESEMPIO QUANDO LO MANDO IN COMPILAZIONE MI DA QUESTO ERRORE:
Ciao.java:4: cannot find symbol
symbol: variabile SavitchIn
location: class Ciao
String nome = SavitchIn.readLine();

gaia86
26-11-2007, 18:38
SCUSATE HO RISOLTO IL PROBLEMA DA SOLA... GRAZIE LO STESSO

gaia86
27-11-2007, 23:48
class Parole{
public static void main (String args[]){
String s = SavitchIn.readLineWord();
String t = SavitchIn.readLineWord();
int x = SavitchIn.readInt();
if (s.length()<x||s.length()>x && t.length()<x||t.length()>x){
System.out.println(s+" "+t);}
else
if(s.length()<t.length()){
System.out.println(s+t);}
if(t.length()<s.length()){
String z = SavitchIn.readLineWord();
System.out.println(z);
}

}
}

NON RIESCO A FAR ANDARE L'IF PIU' INTERNO COSA C'è DI SBAGLIATO IN QUESTO PROGRAMMINO?SE QUALCUNO RIESCE A DARMI UNA SPIEGAZIONE LO RINGRAZIO..
IL RESTO VA PERFETTAMENTE...

banryu79
28-11-2007, 01:49
per prima cosa permettimi di consigliarti una cosa: se in futuro posti del cosdice, per non perdere l'identazione e facilitarci la lettura inseriscilo tra i tag (CODE)..(/CODE) (sostituisci le parentesi tonde con le quadre).

Ecco il codice che hai postato tra i tag "CODE" identato:


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

String s = SavitchIn.readLineWord();
String t = SavitchIn.readLineWord();
int x = SavitchIn.readInt();

if (s.length()<x||s.length()>x && t.length()<x||t.length()>x) {
System.out.println(s+" "+t);
}
else
if(s.length()<t.length()) {
System.out.println(s+t);
}
if(t.length()<s.length()) {
String z = SavitchIn.readLineWord();
System.out.println(z);
}

}
}


Non capisco a quale if ti riferisci dei tre presenti quando dici "if più interno", dato che non sono innestati l'uno nell'atro ma sono allo stesso livello.

Comunque nel primo if dovresti racchiudere tra parentesi le due possibilità, se ho capito la logica che vuoi ottenere:

if((s.length()<x || s.length()>x) && (t.length()<x || t.length()>x)) {
System.out.println(s+" "+t);
}


Ciao

gaia86
30-11-2007, 12:46
grazie mille per risolvere sempre i miei problemini... per quanto riguarda l'ultimo esercizio che ti ho esposto bè mancavano le parentesi tonde ed è andato... :D
Per quanto riguarda questo esercizio di seguito è più o meno la stessa cosa solo che ho provato a mettere le parentesi ma mi sono persa nelle parentesi:
ecco l'esercizio
class Serienumeri{
public static void main(String agrs[]){
int x = SavitchIn.readInt();
int y = SavitchIn.readInt();
int z = SavitchIn.readInt();
boolean b;
if (((x==x%3) && (y==y%3)) && (z==z%3)){
b=true;
System.out.println(b);
}
else{
b=false;
System.out.println(b);
}


}
}


QUANDO LO COMPILO MI DA IN OUTPUT L'ELSE ANCHE SE ME METTO SOLO NUMERI DISPARI MA IO VOGLIO CHE MI FUNZIONI ANCHE L'IF.. GRAZIE MILLE!!!

71104
30-11-2007, 13:43
per verificare se un numero è pari o dispari non devi fare il modulo 3, devi fare il modulo 2; e quando l'hai fatto non devi controllare che il risultato del modulo sia uguale al valore originale, ma che sia uguale a 1 (numero dispari) o 0 (numero pari).

riscrivo l'if per verificare che siano tutti e tre dispari:

if ((x%2!=0) && (y%2!=0) && (z%2!=0)){


per verificare che siano tutti e tre pari invece:

if ((x%2!=1) && (y%2!=1) && (z%2!=1)){

gaia86
30-11-2007, 15:20
Grazie mille per avermi chiarito il problema....

gaia86
03-12-2007, 20:57
Vorrei sapere come si verifica se due stringhe hanno caratteri uguali nelle stesse posizioni, stampando a video i caratteri uguali e la posizione.
Che istruzioni si scrivono?grazie mille a chi mi aiuta...

banryu79
04-12-2007, 00:47
Vorrei sapere come si verifica se due stringhe hanno caratteri uguali nelle stesse posizioni, stampando a video i caratteri uguali e la posizione.
Che istruzioni si scrivono?grazie mille a chi mi aiuta...
Ciao Gaia,

non per essere polemico, ma tanto x sapere: tu ci provi prima a risolvere da sola/o questi problemini?

Se sì potresti postare quale pensi sia la soluzione, dove hai il dubbio maggiore o almeno da dove partiresti?

Se ti va un consiglio "scontato" io al tuo posto prenderei in mano i Javadocs delle API di Java e andrei a buttare un occhio (anche due) alla class String e ai suoi metodi (package java.lang), poi proverei a buttare giù un minimo di codice (dal problema esposto si evince che un ciclo for potrebbe andare bene se decidi di fare il controllo carattere per carattere).