Problemi con lo "Scanner" [programmatore alle prime armi]

di il
12 risposte

Problemi con lo "Scanner" [programmatore alle prime armi]

Ciao a tutti, mi chiamo Marco e ho 15 anni.
Le premesse da fare prime di esporvi il mio problema sono 3:
- So un programmatore alle prime armi e so molto poco di tutto quello che è la programmazione,
- so qualcosa, veramente poco, anche sulla teoria e i concetti, tuttavia è un argomento che sto approfondendo sempre più,
- studio informatica e sono al primo anno.

Sto cercando di creare un applicazione in Java, come ambiente di lavoro uso Eclipse, questa applicazione, in sostanza, in base a determinati dati che vengono inseriti, da una risposta dicendo a quale categoria appartieni.
Lo sviluppo è ancora agli inizi ma l'errore mi viene dato su una di quello che dovrebbe essere una funzione di base: l'input, ovvero la funzione di scanner.
Vi posto il codice con i relativi errori(**** a lato sx) riscontrati durante il debug.

import java.util.Scanner;

public class CalcolatorePeso {

	public static void main(String[] args) {
****	Scanner in = new Scanner (System.in);
		System.out.println("Come ti chiami?");
		String nome = in.nextLine();
		System.out.println("Sei maschio o femmina?\n (inserisci m o f)");
		String sesso = in.nextLine();
		System.out.println("Qual'è la tua altezza?\n (inserisci valori su base 5, ad es: 160, 175)");
****     	int x = in.nextInt();
		System.out.println("Qual'è il tuo peso?");
		int peso = in.nextInt();
		
		String sesso_deciso;
		if ( sesso == "m") sesso_deciso = "MASCHIO"; else sesso_deciso = "FEMMINA";
		System.out.println( sesso_deciso );
		
		}

}



12 Risposte

  • Re: Problemi con lo "Scanner" [programmatore alle prime armi]

    Ciao!
    Per caso stai parlando dei triangoli gialli? Se così fosse allora si tratta di warning, ovvero "cose che funzionano ma sarebbe meglio non fare" e non di errori veri e propri. In particolare per quanto riguarda le variabili "nome", "x" e "peso" eclipse ti avvisa del fatto che tu le dichiari ma non le usi, e quindi eclipse ti consiglia di eliminarle per risparmiare memoria. Ovviamente se in futuro hai intenzione di utilizzarle puoi ignorare il warning. Per quanto riguarda la variabile "in", ti avvisa del fatto che tu non chiudi mai lo scanner (infatti, quando non ti serve più dovresti fare "in.close()"). Se non lo chiudi allora non liberi le risorse destinate a questo oggetto e, ancora una volta, sprechi memoria e quant'altro.

    Un errore che ho notato è questo: tu fai
    sesso_deciso = "MASCHIO";
    , ma per confrontare due stringhe devi usare il metodo "equals()". In pratica devi fare
    sesso_deciso.equals("MASCHIO");
    Lo stesso ovviamente vale anche per
    sesso_deciso = "FEMMINA";
  • Re: Problemi con lo "Scanner" [programmatore alle prime armi]

    Ciao, innanzitutto grazie della risposta!
    E' tutto chiaro tranne la parte dell'equals, potresti spiegarmi meglio?
    Grazie in anticipo

    P.S. altra cosa, una volta finito il progetto come faccio a creare il .dmg??
  • Re: Problemi con lo "Scanner" [programmatore alle prime armi]

    E' semplice: per i tipi di dati primitivi (ovvero int, double, boolean, e quant'altro) il confronto si fa tramite l'operatore "==". Per gli oggetti, invece, l'operatore "==" confronta gli hash dell'oggetto, quindi restituisce true solamente se le due variabili referenziano lo stesso oggetto. Per confrontare due stringhe, quindi, devi usare il metodo equals. Ricorda che è case sensitive, quindi "MASCHIO" è diverso da "maschio" e "MaScHiO". Se non ti interessano le differenze maiuscole/minuscole puoi usare "equalsIgnoreCase()".
  • Re: Problemi con lo "Scanner" [programmatore alle prime armi]

    Ok, grazie!
    ultima cosa , una volta finito il progetto come faccio a creare il .dmg??
  • Re: Problemi con lo "Scanner" [programmatore alle prime armi]

    Beh con Java di sicuro non lo fai: se mai arrivi ad ottenere un jar eseguibile..magari poi esiste qualche programma esterno che incapsula i jar in dmg, ma non ne ho idea sinceramente!
  • Re: Problemi con lo "Scanner" [programmatore alle prime armi]

    Della ha scritto:


    E' semplice: per i tipi di dati primitivi (ovvero int, double, boolean, e quant'altro) il confronto si fa tramite l'operatore "==". Per gli oggetti, invece, l'operatore "==" confronta gli hash dell'oggetto.
    La accendiamo???

    Sei sicuro???


    peccato, la corsa verso il milione finisce qui!!!!


    L'operatore di confronto '==' per gli oggetti richiama l'equals della classe Object, che fà il confronto fra gli indirizzi dei due oggetti, e non fra gli hash.

    altrimenti
    String a ="casa";
    String b= "casa";
    System.out.println("Result (b==a) : "+ (b==a));
    System.out.println("Result b.equals(a) : "+ b.equals(a));
  • Re: Problemi con lo "Scanner" [programmatore alle prime armi]

    Hai ragione, è così..
  • Re: Problemi con lo "Scanner" [programmatore alle prime armi]

    Della ha scritto:


    Hai ragione, è così..
    ovviamente il mio intervento era ironico
  • Re: Problemi con lo "Scanner" [programmatore alle prime armi]

    zaknafein83 ha scritto:


    L'operatore di confronto '==' per gli oggetti richiama l'equals della classe Object, che fà il confronto fra gli indirizzi dei due oggetti, e non fra gli hash.
    Veramente è il contrario: è il metodo equals() di Object che usa l'operatore '=='. Questo il sorgente del metodo equals() della classe Object:
    
    public boolean equals(Object obj) {
       return (this == obj);
    }
    
    Ciao.
  • Re: Problemi con lo "Scanner" [programmatore alle prime armi]

    Se non ridefinisci l'equals, infatti
    a == b
    e
    a.equals(b)
    coincidono.

    volevo semplicemente dire che fare == tra due oggetti equivale a richiamare il metodo equals di Object, che facendo il confronto sugli indirizzi fisici (che sono dei tipi di base) userà il confronto con '=='.
  • Re: Problemi con lo "Scanner" [programmatore alle prime armi]

    zaknafein83 ha scritto:


    se non ridefinisci l'equals, infatti
    a == b
    e
    a.equals(b)
    coincidono.

    volevo semplicemente dire che fare == tra due oggetti equivale a richiamare il metodo equals di Object, che facendo il confronto sugli indirizzi fisici (che sono dei tipi di base) userà il confronto con '=='.
    Sì, questo è corretto.

    Ciao.
  • Re: Problemi con lo "Scanner" [programmatore alle prime armi]

    Tranquillo, immaginavo in ogni caso avevo sbagliato!
Devi accedere o registrarti per scrivere nel forum
12 risposte