Newsgroup: it.comp.java
Titolo: Passare argomenti da linea di comando

Ciao a tutti
Inizio a studiare java
Una piccola applicazione che prende argomenti dalla linea di comando
in pratica devo creare 2 oggetti e il ";" mi funge da separatore per i
parametri
che serviranno a fare il primo oggetto e i parametri del secondo.
if(args[i]==";"){
Il problema e' che questa riga non funzia ....
e neanche
if(args[i].toString()==";"){
non ottengo nessun errore dal compilatore, semplicemente non riconosce il
";"
:-(
============== Codice intero ==========================
public class Main {
     public Main() {
    }
    public static void main(String[] args) {
        int posVirg=-1;
        //occorre fare in modo che l'applicazione accetti fino a un
        // massimo di 7 parametri e minimo 5
        if(args.length<5 || args.length>7){
        System.out.println("Attenzione !\n si e' verificato un errore");
        System.exit(0);
        }
        else{
            System.out.println("Correttissimi, ora vedo che posso fare...");
        for(int i=0;i<args.length;i++){
            System.out.println("controllo la posizione " + i + " e trovo " +
args[i]); // ###
       if(args[i].toString()==";"){ // ho trovato dove sta il separatore //
<<<<<<<<< Riga incriminata !!
            System.out.println("!!!!! il Simbolo l'ho trovato alla posizione
" + i); // ###
                posVirg=i;
                if(posVirg==2){// stiamo confrontando punti 2D
                    System.out.println("...ah  stai creando un punto 2D");
                    int pnt0=Integer.parseInt(args[0]);
                    int pnt1=Integer.parseInt(args[1]);
                    int pnt3=Integer.parseInt(args[3]);
                    int pnt4=Integer.parseInt(args[4]);
                    punto2D Alfa=new punto2D(pnt0, pnt1);
                    punto2D Beta=new punto2D(pnt3, pnt4);
                    System.out.println("Ho creato due punti 2D");
                }
                else if(posVirg==3){ // punti 3D
                     System.out.println("...mmm stai creando un punto 3D
infatti il ; sta alla posizione " + posVirg);
                    int pnt0=Integer.parseInt(args[0]);
                    int pnt1=Integer.parseInt(args[1]);
                    int pnt2=Integer.parseInt(args[2]);
                    int pnt5=Integer.parseInt(args[5]);
                    int pnt6=Integer.parseInt(args[6]);
                    int pnt7=Integer.parseInt(args[7]);
                    punto3D Alfa=new punto3D(pnt0, pnt1, pnt2);
                    punto3D Beta=new punto3D(pnt5, pnt6, pnt7);
                    System.out.println("Ho creato due punti 3D !");
                }
            }
        }
        // --- vediamo se posVirg č rimasto a -1
        if(posVirg==-1){
        System.out.println("Com' č che non ho trovato il separatore ?");
        System.out.println("Ciao !");
        System.exit(0);
        }
        }
    }
}

 non ottengo nessun errore dal compilatore, semplicemente non riconosce il ";"
Prego?
a me il compilatore da una bella (e direi attesa) "illegal start of
expression"
Ma sei proprio proprio sicuro di quella sintassi?
Non e' che intendevi args[i].indexOf(";")

         System.out.println("Com' è che non ho trovato il separatore ?");


 >         System.out.println("Com' č che non ho trovato il separatore ?");


 
args[i].toString().equals(";")
Il confronto lessicografico tra stringhe va fatto con il metodo equals() 
e non con l'operatore "==".
Ciao,
Jack

ho provato il tuo esempio e questo e' l'output:
2
56
3
;
25
6
10
quindi li trova tutti...
l'errore sara' da qualche altra parte

 writes:
i> ho provato il tuo esempio e questo e' l'output: 2 56 3 ; 25 6 10
i> quindi li trova tutti...  l'errore sara' da qualche altra parte
Magari prima di Java e non è un errore, ma una caratteristica del sistema
operativo ospite.
Ad esempio il risultato di lanciare
java PK 1 2 3 4 ; 5 6
con PK definito in questo modo
public class PK {
    public static final void main(final String[] args) {
	for (int i=0; i < args.length; i++) {
	    System.out.println(args[i]);
	}
    }
}
sotto Windows e sotto Unix  da risultati diversi, il perché è lasciato
al lettore come esercizio.
Qualcosa mi dice che iomcenter-giginus usa Windows e Rataplan un qualcuno
tra Unix, Linux o Mac OS X...
Suggerimento a Rataplan: NON usare  ;,|# come separatori tra gruppo di
parametri, ma una stringa, che so, -gd ...
-- 
 /\            ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
  //--\ | | \|  |   Integralista GNUslamico  
\/		    e allevatore di bug da competizione

non ci avevo pensato...
oppure puo' fare così
java PK 1 2 3 4 ";" 5 6
giusto? (sono un linux-luser.... lo ammetto :-) )

 writes:
i> oppure puo' fare così java PK 1 2 3 4 ";" 5 6 giusto? 
Yep, messo tra  doppi o singoli apici non viene  più preso dalla shell
come terminatore di comando.
i> (sono un linux-luser.... lo ammetto :-) )
Viva la libertà!
<OT>
http://catb.org/~esr/writings/unix-koans/
</OT>



......forse non hai fatto caso ad un replay che, correttamente, ti 
suggeriva di usare
Stringa pippo = ";";
if (argv[i].equals(pippo)){
	System.out.println(argv[i]);
}
le stringhe si confrontano con "equals" non con "==" mica sono numeri.....

 i> (sono un linux-luser.... lo ammetto :-) )
io pure ma appena posso il Makefile lo sostituisco con ANT e il bash con 
il PYTHON.... programmare si... ma senza fare i duri e puri..... :-)
ben inteso.... lo dico amichevolmente ;-)


> terminatore di comando.
k> scusate ragazzi.... ma questo č masochismo..... :-D
E' un workaround che si usa quando gli altri danno nomi osceni ai file...
i> (sono un linux-luser.... lo ammetto :-) )
k> io pure ma appena posso il Makefile lo sostituisco con ANT e il
Non ho ancora visto configure generare un build.xml :) :) :).
Indubbiamente Makefile č ostico, ma  ant non č tutta questa meraviglia
:), anche se č veramente comodo averlo a disposizione.
k> bash con il PYTHON.... programmare si...
Hmmm... Riesci sempre a usare la pipe ? E' la pipe la potenza della shell.
Python con la cosa che la posizione conta mi ricorda troppo il FORTRAN...
E' una menata, lo so, ma č una di quelle paure irrazionali che sono dure
a sconfiggersi.
btw con Pythoh fai questo :) :) :) ?
#-----------------------------------------------------------------------
#! /bin/bash
aterm -geometry 134x50+0+0 -T rdesktop.console \
    -name rdesktop.console -bg gold -fg blue -tr \
    -trsb -tint gold -e rdesktop.starter
#-----------------------------------------------------------------------
#!/bin/bash
TGT=`xprop -name rdesktop.console  | awk '/group leader/ { print $7 }'`
echo -e "Server:\c"
read svr
rdesktop -X $TGT -K -k it -a 8 -z -T $svr -r sound:local \
    -g workarea -u Administrator $svr
#-----------------------------------------------------------------------
BTW, di Python me ne parlano assai bene, avere il tempo di provarlo...
Ma prima devo provare il Common LISP...


 ";"
Il compilatore non da alcun errore perchè con l'operatore == fai un
confronto fra i riferimenti che è lecito ma sbagliato per il tuo caso.
Se vuoi confrontare due stringhe devi usare il metodo .equals().
Accantonato questo grossolano errore potrai passare a quelli successivi.
Un po' di sano debug non guasta. Verifica quanto valgono nel tuo caso le
stringhe contenute nell'array args[] e deduci quello che devi fare.

Grazie a tutti !!
Siete stati davvero preziosi e prodighi di suggerimenti.
Spero di migliorare tanto da poter essere di aiuto a chi verra' dopo di me
anche solo la meta'
di quanto lo siete stati voi !
:-)
tornando al problema in effetti facevo un errore da novello:
confrontavo due stringhe con == e non usavo equals()
..ora posso andare avanti e affrontare gli altri errori !
grazie di tutto
ciao