Errori

di il
12 risposte

Errori

Mi potreste spiegare perchè ho i seguenti errori??

public class Auto{
	private String testo;
	public int velocità;
	public Auto(){
		velocità = 50;
	}
	public void  incDec (String testo)
	{
		this.testo=testo;
		char lettera;
		testo.toUpperCase();
		for (int i=0; i<100; i++)
		{
			lettera=testo.charAt(0);
			switch (lettera)
			{
			case 'A': velocità += 5;
			case 'F': velocità -= 10;
			}
		}
	}		
	public int getVelocità()
	{
		return velocità;
	}
}

import java.util.Scanner;
public class ProgAuto {

	public static void main(String[] args) {
		Scanner scanner = new Scanner (System.in);
		String lett="";
		Auto modo = new Auto();
		System.out.print("Inserisci il carattere: ");
		String lett = scanner.nextLine();    
		modo.incDec(lett);
		System.out.print("la velocità è: "+"km/h"+modo.getVelocità());
		
	}

}
String lett = scanner.nextLine();
modo.incDec(lett);
System.out.print("la velocità è: "+"km/h"+modo.getVelocità());

12 Risposte

  • Re: Errori

    Eh ma che errori ti da?
  • Re: Errori

    Ok risolto.

    Però il programma non fa nè gli incrementi nè i decrementi.E il ciclo for non funziona nemmeno.
  • Re: Errori

    Attento a questa parte:
    
    this.testo=testo;
    char lettera;
    testo.toUpperCase();
    
    String è immutabile, quindi l'ultima linea di codice non fa assolutamente nulla, la stringa con i caratteri maiuscoli viene gettata via.
    Tu vuoi invece riassegnarla a una variabile, ad esempio a testo.
  • Re: Errori

    Attento a questa parte:

    Codice: Seleziona tutto
    this.testo=testo;
    char lettera;
    testo.toUpperCase();
    Qui volevo fare che se digito una lettera minuscola, me la cambia in lettera maiuscola dato che nel case ho utilizzato le lettere maiuscole.
  • Re: Errori

    E il resto perchè non va??
    Ho spostato il ciclo for che avevo sbagliato file,però non riesco a cpaire perchè non so fare questi metodi. Soprattuto quelli con il get non me ne funziona mai uno
    Dove sbaglio?
  • Re: Errori

    Intanto un consiglio: mai dare alle variabili nomi con caratteri speciali, lettere accentate in primis, dovrebbe valere anche per il resto del codice ma soprattutto per gli identificatori. Usa solo caratteri sicuri.

    Devi dire cos'è che non va, cosa ti aspetteresti dal codice e cosa invece riscontri. Una cosa te l'ho già detta, e te la ripeto, quel testo.toUpperCase () non fa nulla, String è immutabile, devi assegnarlo a qualcosa.

    Vuoi dire che se entri nel metodo con testo = "a", lettera vale 'a' prima dello switch, non 'A'.

    Inoltre lo switch non si fa in quel modo. Se entri nel case 'A', con il tuo codice entri anche nel case 'F', perché lo switch esegue tutti i case a partire dal punto di ingresso. O metti un break dopo ogni case o ti assicuri che il metodo ritorni, altrimenti ogni volta che incrementi di 5 la velocità la diminuirai anche di 10.

    Altra cosa: non usare variabili dichiarate come public, non è una buona pratica e non serve quasi mai (a volte lo si fa con le costanti), in questo caso men che meno.

    Inoltre nel ciclo da 0 a 100 prendi sempre il carattere alla posizione 0, quindi ripeteresti 100 volte la stessa azione in base alla prima lettera. Volevi fare così ? Se no, prendi l'indice corrispondente, ma non puoi usare < 100 come condizione, se la stringa è più corta esplode tutto.
  • Re: Errori

    Ok. Il programma adesso funziona. Dal materiale di studio ho capito che testo.toUpperCase() serve per trasforare tutti i caratteri della stringa in maiuscolo. Quindi, siccome il mio case utilizza lettere maiuscole, per evitare di digitare da tastiera tali lettere, ho preferito usare quella funzione per fare la trasformazione automatica.
    Il carattere lo prendo alla posizione zero perchè mi deve leggere solo laprima lettera che inserisco da tastiera.
  • Re: Errori

    trixy ha scritto:


    Ok. Il programma adesso funziona. Dal materiale di studio ho capito che testo.toUpperCase() serve per trasforare tutti i caratteri della stringa in maiuscolo. Quindi, siccome il mio case utilizza lettere maiuscole, per evitare di digitare da tastiera tali lettere, ho preferito usare quella funzione per fare la trasformazione automatica.
    E fai bene a farlo. Ma forse non ti è ancora chiaro cosa intendo con riassegnarla:
    
    String testo = "a";
    testo.toUpperCase (); // testo continua a valere "a", String è immutabile.
    testo = testo.toUpperCase (); // testo adesso vale "A".
    
    Ovviamente puoi anche usare una nuova stringa.

    trixy ha scritto:


    Il carattere lo prendo alla posizione zero perchè mi deve leggere solo laprima lettera che inserisco da tastiera.
    Ok, mi ero perso il fatto che il for l'avevi già tolto. Però attento comunque che anche prendere l'indice 0 potrebbe dare errore, ad essere pignoli dovresti comunque controllare.
  • Re: Errori

    String testo = "a";
    testo.toUpperCase (); // testo continua a valere "a", String è immutabile.
    testo = testo.toUpperCase (); // testo adesso vale "A".
    Perfetto.
  • Re: Errori

    Nel caso volessi far terminare il programma se inserisco qualsiasi altro valore diverso da A e F, devo compilare il case con tutte le lettere dell'alfabeto oppure esiste un metodo più immediato?
  • Re: Errori

    Terminare il programma in che senso? Se vuoi che si esca proprio dalla applicazione c'è il System.exit ().

    Ma sarebbe più ragionevole mandare un messaggio d'errore e richiedere un nuovo input. Questo puoi farlo in più modi, puoi ritornare true/false nel metodo, a seconda che la modifica sia andata a buon fine, o (meglio) lanci un'eccezione se il comando non è riconosciuto, e fai un blocco try-catch nel main o dove richiedi l'input che faccia in modo di richiedere l'input.

    In ogni caso ovviamente non hai bisogno di controllare tutte le lettere. Se usi un if (lettera == 'A') ... else if (lettera == 'F') ... ti basta un else finale dove ritorni false/lanci l'eccezione. Se usi lo switch dopo i vari case basta inserire una clausola default dove gestisci tutto il resto dei casi.
  • Re: Errori

    Ok
Devi accedere o registrarti per scrivere nel forum
12 risposte