Vai al contenuto

[EYEHELP] JavaChiunque sapesse qualcosa di java mi aiutasse _


  • Non puoi aprire una nuova discussione
  • Effettua l'accesso per rispondere
Questa discussione ha avuto 57 risposte

#1
Kerishan

Kerishan
  • Fear this Night

  • StellettaStellettaStellettaStellettaStelletta
  • Gruppo: Utente Pro
  • Messaggi: : 2670
Sto' cercando di imparare java, mi ritrovo davanti ad un problema che non riesco a risolvere.

Mettiamo il caso che ho un programma stupido del tipo ripetere la richiesta del nome dell'utente e stamparla finchè uno non scrive EXIT.
Allora scrivo così:

    public static void main(String[] args) {
	    String nome;
	    String input = "Avvia";
	   
	    while(input!="Exit"){
		    System.out.println("Inserisci il tuo nome ");
		    Scanner innome = new Scanner(System.in);
		    nome = innome.nextLine();  
		    System.out.println("Nome: " + nome);
	    System.out.println("Scrivi Avvia per continuare, Exit per uscire ");
	    Scanner in = new Scanner(System.in);
	    input = in.nextLine();
	    }
	    System.out.println("EXIT!");
    }
}

Il problema e che se scrivo Exit il programma non mi resistuisce EXIT! ma si ripete comunque, qualche anima pia mi spiega cosa sbaglio?

#2
Genocide

Genocide
  • Sheer Heart Attack!

  • StellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • Gruppo: Collaboratore Forumeye
  • Messaggi: : 106613
Scusa ma perchè non usi un booleano per il check del ciclo while?

dai ad una variabile booleana il valore false, quando la stringa vale Exit diventa true. Se la variabile diventa true non ripete il ciclo. Ti semplifichi la vita almeno all'inizio


Comunque il problema è qui
while(input!="Exit")


non puoi paragonare una stringa utilizzando operatori come == o !=. Quelle funzionano solo con le primitive come integer, double, boolean ecc...

Per le stringhe devi usare equals. Non mi ricordo con precisione che è un pò che non smanetto con queste cose, ma dovrebbe essere qualcosa del tipo


t = la stringa ricevuta
t.equals("Exit")


e ti restituisce un booleano (chiaramente true se uguali, false altrimenti)

#3
LTA

LTA
  • Strong Eye Fan

  • StellettaStellettaStelletta
  • Gruppo: Utente Pro
  • Messaggi: : 1258
La butto lì, con possibilità di sbagliarmi: non potrebbe dare noie il fatto che chiami "in" lo scanner di controllo, quando in è una parola chiave del linguaggio (con tanto di colorazione diversa nel codice)?
Prova a dargli un altro nome (tipo "inp") a vedere cosa succede!

EDIT: ho letto la risposta sopra, ben più sensata della mia. Lascia stare :-)

Modificata da LTA, 11 October 2012 - 04:22 PM.


#4
-Krell

-Krell
  • IronEye

  • StellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • Gruppo: Utente Pro
  • Messaggi: : 22414

Scusa ma perchè non usi un booleanoper il check del ciclo while?

dai ad una variabile booleana il valore false, quando la stringa vale Exit diventa true. Se la variabile diventa true non ripete il ciclo. Ti semplifichi la vita almeno all'inizio


Comunque il problema è qui
while(input!="Exit")


non puoi paragonare una stringa utilizzando operatori come == o !=. Quelle funzionano solo con le primitive come integer, double, boolean ecc...

Per le stringhe devi usare equals. Non mi ricordo con precisione che è un pò che non smanetto con queste cose, ma dovrebbe essere qualcosa del tipo


t = la stringa ricevuta
t.equals("Exit")


e ti restituisce un booleano (chiaramente true se uguali, false altrimenti)

Il prof di sistemi ce l'ha spiegato oggi ma mica ho capito bene.. in cosa consiste sostanzialmente?

#5
MaxCady

MaxCady
  • Little Eye Fan

  • Stelletta
  • Gruppo: Utente
  • Messaggi: : 40
Al di là del fatto che non conosco il codice con cui prendi la stringa, come è già stato detto non puoi comparare le stringhe con != o ==. Prova a fare while(input.compareTo("Exit")!=0)

#6
Genocide

Genocide
  • Sheer Heart Attack!

  • StellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • Gruppo: Collaboratore Forumeye
  • Messaggi: : 106613

Il prof di sistemi ce l'ha spiegato oggi ma mica ho capito bene.. in cosa consiste sostanzialmente?


un booleano deriva dall'algebra di Boole che sfrutta i valori 1 e 0 per indicare il vero (1) ed il falso (0). In informatica il booleano è una primitiva (come gli interi...è come dire "un numero" o "una parola") che appunto acquisisce due tipologie di valori, TRUE ( che corrisponde all'1) e FALSE (0)

#7
Genocide

Genocide
  • Sheer Heart Attack!

  • StellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • Gruppo: Collaboratore Forumeye
  • Messaggi: : 106613
probabilmente kerishan c'ha costruito skynet con quel codice e ora non riesce più a spegnerlo :o

#8
pio ping 34

pio ping 34
  • Super Eye Fan

  • StellettaStellettaStellettaStelletta
  • Gruppo: Utente Pro
  • Messaggi: : 2065
il ciclo non termina: l eguaglianza che testi nel while non ha senso: input!="exit" significa che verifica che vuoi testare l uguaglianza di due riferimenti che sono in realt per forza di cose diversi.
quello che vorresti fare te testare che i simboli delle due stringhe non siano equivalenti.
per fare questo devi mettere al posto di quella cosa li questo:

while(!input.equalsIgnoreCase("exit"){/*resto del codice*/}

cmq in zona tecnica pc c un topic che parla di java ti conviene postare i tuoi dubbi li :)

Modificata da pio ping 34, 11 October 2012 - 06:44 PM.


#9
pio ping 34

pio ping 34
  • Super Eye Fan

  • StellettaStellettaStellettaStelletta
  • Gruppo: Utente Pro
  • Messaggi: : 2065
scanner inoltre una funzionalita nuova (cioe ha circa due anni) mi sembra sia stata introdotta con la versione 1.6 o 1.4 1.5 di java. evita di sollevare una ioException e ha un codice molto piu snella rispetto a bufferedreader

edit ho controllato sul sito della oracle

Modificata da pio ping 34, 11 October 2012 - 07:12 PM.


#10
Genocide

Genocide
  • Sheer Heart Attack!

  • StellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • Gruppo: Collaboratore Forumeye
  • Messaggi: : 106613
credo dalla 1.6

#11
Genocide

Genocide
  • Sheer Heart Attack!

  • StellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • Gruppo: Collaboratore Forumeye
  • Messaggi: : 106613
imho se glielo dicono altre 25 persone lo capisce ancora meglio :sisi:

#12
pio ping 34

pio ping 34
  • Super Eye Fan

  • StellettaStellettaStellettaStelletta
  • Gruppo: Utente Pro
  • Messaggi: : 2065
comunque.. tanto perche' non sapevo che fare.. u__u

io il programmino "scemo" l'avrei scritto cosi


private static boolean check(Scanner scan,String test){
        String aa;
        return !(aa=scan.nextLine()).equalsIgnoreCase(test)&&stampa(aa);
    }

private static boolean stampa(String aa){
    System.out.println("Nome:"+aa);
    return true;
}   
public static void main(String[]args){
    Scanner scan =new Scanner(System.in);
    do{
        System.out.print("Inserisci il tuo Nome (Exit per terminare)");
    }while(check(scan,"Exit"));
    System.out.println("Exit");
}

P.s. lascia perdere Java, e impara linguaggi meno limitati come C# o C++


:megalol:

ti paga microsoft (scherzo :D )...
C++ non lo usa piu' nessuno.. addirittura quelli che sviluppano videogiochi sono disposti a sacrificare le performance (tanto ormai la capacita' di calcolo e' elevata)
per non averci a che fare :gad2:

Modificata da pio ping 34, 11 October 2012 - 09:10 PM.


#13
Genocide

Genocide
  • Sheer Heart Attack!

  • StellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • Gruppo: Collaboratore Forumeye
  • Messaggi: : 106613

:megalol:

ti paga microsoft (scherzo :D )...
C++ non lo usa piu' nessuno.. addirittura quelli che sviluppano videogiochi sono disposti a sacrificare le performance (tanto ormai la capacita' di calcolo e' elevata)
per non averci a che fare :gad2:


ma infatti quel consiglio era da evitare

#14
-Krell

-Krell
  • IronEye

  • StellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • Gruppo: Utente Pro
  • Messaggi: : 22414
Ma tipo io ora sto imparando da me il c++. Ero covinto fosse un buon linguaggio di partenza.. visto che in informatica al momento facciamo solo flowchart, e in sistemi usiamo il... rullo di tamburi... pascal. Voi che linguaggio mi consigliate di imparare? Linguaggio che studio parallelamente a quello che faccio in classe naturalmente...

#15
Faust

Faust
  • Feel the backhand of justice!!

  • StellettaStellettaStellettaStelletta
  • Gruppo: Utente Pro
  • Messaggi: : 2479
  • Utente Nr: 30702
  • Feedback Mercatino: Guarda | Lascia
  • darkfaust
  • 3155 5948 9559 2378
  • Faust

C++ non lo usa piu' nessuno..


E' quello che pensano i più informati, ed anche i garbage-collector dipendenti :pff:




Leggono questa discussione 0 utenti

0 utenti, 0 ospiti, 0 utenti anonimi