Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Perché if non funziona?

    Premetto che è la prima volta che programmo in java e questo è il mio primo programma.
    Il problema è questo, ho creato un if che, dipende dall'input che gli dai dalla tastiera, stampa a video frasi diverse, però non funziona e non riesco a capire il perché.
    Codice:

    import java.io.*;
    public class Rain{
    public static void main (String[] args){
    char par;
    int k;
    System.out.println("Scrivi un numero:");
    InputStreamReader reader = new InputStreamReader(System.in);
    BufferedReader myInput = new BufferedReader(reader);
    String str= new String();
    try{str = myInput.readLine();
    }catch(IOException e){
    System.out.println ("Si è verificato un errore: " + e);
    System.exit(-1);
    }
    k = Integer.parseInt(str);
    System.out.println ("Scrivi \"ciao\"");
    BufferedReader myInput2 = new BufferedReader(reader);
    String str2= new String();
    try{str2 = myInput2.readLine();
    }catch(IOException e){
    System.out.println ("Si è verificato un errore: " + e);
    System.exit(-1);
    }
    if(str2 == "ciao") System.out.println(str2);
    else System.out.println("Non hai scritto ciao");
    }
    }

    Netbeans non dà nessun errore nella compilazione, qualcuno può aiutarmi?

  2. #2
    la prossima volta usa i tag code per scrivere il codice se no cosi nn si capisce bene:
    codice:
    import java.io.*;
    
    public class Rain {
    
        public static void main(String[] args) {
            char par;
            int k;
            System.out.println("Scrivi un numero:");
            InputStreamReader reader = new InputStreamReader(System.in);
            BufferedReader myInput = new BufferedReader(reader);
            String str = new String();
            try {
                str = myInput.readLine();
            } catch (IOException e) {
                System.out.println("Si è verificato un errore: " + e);
                System.exit(-1);
            }
            k = Integer.parseInt(str);
            System.out.println("Scrivi \"ciao\"");
            BufferedReader myInput2 = new BufferedReader(reader);
            String str2 = new String();
            try {
                str2 = myInput2.readLine();
            } catch (IOException e) {
                System.out.println("Si è verificato un errore: " + e);
                System.exit(-1);
            }
            if (("ciao").equals(str2)) {
                System.out.println(str2);
            } else {
                System.out.println("Non hai scritto ciao");
            }
        }
    }
    questo e il codice corretto. l'if non funzionava per il semplcie fatto che hai una stringa non puoi scrivere == ad un'altra stringa questo == tra 2 stringe controlla se la locazione di memoria delle 2 variabile è uguale quindi restituisce sempre false

    per fare uguaglienza tra 2 stringe devi usare il metodo equals delle stringhe
    in questo caso:
    ("ciao").equals(str2) questo fa il confronto lettera per lettera delle stringe. ricorda se scrivi Ciao grnade ti restituisce sempre false perche e case sensetivi cioè riconosce il maiuscolo e il minuscolo ... se vuoi che nn sia case sensitive basta che scrivi cosi
    ("ciao").equals(str2.toLowerCase())

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    108
    devi mettere l'equals
    if(str2.equals("ciao")) e vedi che funziona

  4. #4
    Chiarissimo grazie mille.
    Il tag code lo avevo messo solo che poi si è tolto, o forse lo avrò eliminato per sbaglio incollandogli sopra il codice.
    Alla prossima

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da GianniMal
    devi mettere l'equals
    if(str2.equals("ciao")) e vedi che funziona
    va bene anche spiegare perché (visto che è una persona che si avvicina ora a java).
    In java gli oggetti vanno tutti confrontanti per equals: == (come inizialmente avevi fatto) confronta i riferimenti, quindi se i riferimenti sono uguali (stesso oggetto) torna true, altrimenti false.

    In alcuni casi il compilatore è furbo e "risparmia" una variabile se assegni valore uguali, in altri casi non è detto, quindi in generale è meglio fare riferimento ad equals.
    Nota che per i confronti di equals va fatto l'override (non l'overload), altrimenti di default si segue il confronto dei riferimenti.
    All'inizio sembra assurdo, poi quando ne capisci le potenzialità lo apprezzi

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    108
    Originariamente inviato da valia
    va bene anche spiegare perché (visto che è una persona che si avvicina ora a java).
    In java gli oggetti vanno tutti confrontanti per equals: == (come inizialmente avevi fatto) confronta i riferimenti, quindi se i riferimenti sono uguali (stesso oggetto) torna true, altrimenti false.

    In alcuni casi il compilatore è furbo e "risparmia" una variabile se assegni valore uguali, in altri casi non è detto, quindi in generale è meglio fare riferimento ad equals.
    Nota che per i confronti di equals va fatto l'override (non l'overload), altrimenti di default si segue il confronto dei riferimenti.
    All'inizio sembra assurdo, poi quando ne capisci le potenzialità lo apprezzi
    ok ma mentre rispondevo avevo visto che era stato già spiegato nel commento prima del mio

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da GianniMal
    ok ma mentre rispondevo avevo visto che era stato già spiegato nel commento prima del mio
    ok anche così...

    l'if non funzionava per il semplcie fatto che hai una stringa non puoi scrivere == ad un'altra stringa questo == tra 2 stringe controlla se la locazione di memoria delle 2 variabile è uguale quindi restituisce sempre false
    purtroppo io ho il compilatore "intelligente" che "riusa" la locazione in alcuni casi, quindi col test stupido che ho fatto ritorna sempre true.
    In generale vale sempre con oggetti equals (per evitare grattacapi poi=

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.