Condizione a scelta IF in base al valore

di il
13 risposte

Condizione a scelta IF in base al valore

Come mai non riesco ad entrare nel else? dove ho sbagliato? Vorrei fare questo Test in base a questa struttura che ho schematizzato.

public static void main(String[] args) {
		String a = "10";
		String b = "6";
		boolean t = false;
		boolean v = false;

		for (int i = 0; i < a.length(); i++) {
			for (int j = 0; j < b.length(); j++) {
				if (a.equals(b)) {
					t = true;
					System.out.println("sono uguali");
				}
			}
			if (t == false) {
				if(a != b) {
				System.out.println("non sono uguali: " + a + "!=" + b);
				}
				else {
					v= true;
					if(a.equals("10")) {
						System.out.println("Non inserire il numero 10");
					}
				}

			} 
		}
	}


13 Risposte

  • Re: Condizione a scelta IF in base al valore

    imparareJava ha scritto:


    Come mai non riesco ad entrare nel else? dove ho sbagliato?
    Con i tipi reference, gli operatori == e != si basano solo sulla "identità" degli oggetti. NON sul loro contenuto.

    a != b nel tuo caso è SEMPRE "vero", perché sono due oggetti String distinti.

    Se non ti sono chiari questi concetti, (ri)prendi pure in mano un buon libro su Java. Dall'inizio.
  • Re: Condizione a scelta IF in base al valore

    Supponi se fossero Oggetti a e b, funziona lo stesso, in questo approccio?
  • Re: Condizione a scelta IF in base al valore

    Ma anche in questo caso non mi funziona???
    
    public static void main(String[] args) {
    		String a = new String();
    		String b = new String();
    		boolean t = false;
    		boolean v = false;
    		a = "10";
    		b = "7";
    
    		for (int i = 0; i < a.length(); i++) {
    			for (int j = 0; j < b.length(); j++) {
    				if (a.equals(b)) {
    					t = true;
    					System.out.println("sono uguali");
    				}
    			}
    			if (t == false) {
    				if (a != b) {
    					System.out.println("non sono uguali: " + a + "!=" + b);
    				} else {
    					if (a.equals("10")) {
    						v = true;
    						System.out.println("NO 10");
    					}
    
    				}
    
    			}
    
    		}
    	}
    
    }
    
    
    
  • Re: Condizione a scelta IF in base al valore

    imparareJava ha scritto:


    		a = "10";
    		b = "7";
    "10" e "7" sono costanti che a runtime sono oggetti String (ovviamente) distinti. Quindi a == b è false. Punto.
  • Re: Condizione a scelta IF in base al valore

    Se aggiungo GET e SET, funziona lo stesso? perchè sto simulando un progetto che devo realizzare
  • Re: Condizione a scelta IF in base al valore

    imparareJava ha scritto:


    Se aggiungo GET e SET, funziona lo stesso? perchè sto simulando un progetto che devo realizzare
    "get" "set" che cosa?? Ma di cosa parli?
  • Re: Condizione a scelta IF in base al valore

    Nel senso creo una classe con get e set. Poi vado a richiamare, in questo caso il test che sto facendo funziona lo stesso?
  • Re: Condizione a scelta IF in base al valore

    imparareJava ha scritto:


    Nel senso creo una classe con get e set. Poi vado a richiamare, in questo caso il test che sto facendo funziona lo stesso?
    Sinceramente, NON è affatto chiaro COSA vuoi fare.

    Che senso ha fare:
    		for (int i = 0; i < a.length(); i++) {
    			for (int j = 0; j < b.length(); j++) {
    				if (a.equals(b)) {
    ??

    Cioè un doppio for in cui ciascuno cicla sulla "lunghezza" (numero di char) della stringa e poi tanto dentro fai lo stesso equals sulle due stringhe???
  • Re: Condizione a scelta IF in base al valore

    
    public class Test {
    
    	public static void main(String[] args) {
    		boolean t = false;
    		boolean v = false;
    		
    		Prova prova = new Prova();
    		prova.setA("10");
    		prova.setB("8");
    		
    		for (int i = 0; i < prova.getA().length(); i++) {
    			for (int j = 0; j < prova.getB().length(); j++) {
    				if (prova.getA().equals(prova.getB())) {
    					t = true;
    					System.out.println("sono uguali");
    				}
    			}
    			if (t == false) {
    				if (prova.getA() != prova.getB()) {
    					System.out.println("non sono uguali: " + prova.getA() + "!=" + prova.getB());
    				}
    
    			} else {
    				if(prova.getA().equals("10")){
    					v= false;
    						System.out.println("VEro");
    				}
    			}
    
    		}
    	}
    	
    	
    }
    
    
    
    In questo modo non funziona, visto che sto simulando.

    In pratica nel mio progetto ci sono due oggetti, che devo fare una cosa simile a questo. Rispettando le tre condizioni.
    Ma la terza condizione non entra se A = 10.
  • Re: Condizione a scelta IF in base al valore

    imparareJava ha scritto:


    		for (int i = 0; i < prova.getA().length(); i++) {
    			for (int j = 0; j < prova.getB().length(); j++) {
    				if (prova.getA().equals(prova.getB())) {
    
    Primo, non c'entrerebbe nulla una classe che "incapsula" due stringhe A e B. Non è quello che cambia la "semantica" del equals o degli operatori == e != con i tipi reference.

    Secondo, forse non ti sei ancora reso conto: dentro i due for ripeti lo stesso equals. Se la stringa a avesse 2 caratteri e la stringa b avesse 3 caratteri, tu ripeti lo STESSO equals (con gli stessi dati) 6 volte. QUALE senso ha??

    Terzo: continui (forse) a non comprendere il concetto di == e !=. Lo ripeto: con i tipi reference si basano SOLO sulla "identità" degli oggetti.
    Integer numA = new Integer(123);
    Integer numB = new Integer(123);
    
    System.out.println(numA.equals(numB));   // true (hanno lo stesso contenuto)
    System.out.println(numA == numB);        // false (sono oggetti Integer DISTINTI)
    Cosa (eventualmente) non è chiaro di questo codice?
  • Re: Condizione a scelta IF in base al valore

    Per gli interi si applica == ma non per le stringhe
  • Re: Condizione a scelta IF in base al valore

    imparareJava ha scritto:


    Per gli interi si applica == ma non per le stringhe
    == (!=) si applicano a stringhe e tutti i tipi reference. Ma si basano sulla identità NON sul contenuto. E quindi è raro (e solo per casi davvero particolari) dover usare == e != sui tipi reference.
  • Re: Condizione a scelta IF in base al valore

    Guarda che per le stringhe il discorso è identico
       
       	    String a = "ciao!";
                String b = "ciao!";
                System.out.println(b.equals(a)); // true
                System.out.println(b == a); // true            
                b = new String("ciao!");
                System.out.println(b.equals(a)); // true
                System.out.println(b == a); // false
               
Devi accedere o registrarti per scrivere nel forum
13 risposte