Perché una variabile intera dentro un metodo statico, si com

di Anonimizzato13367 il
7 risposte
Ciao a tutti ...
Volevo chiedere agli esperti alcune cose, inerenti al seguente codice:

public class ContaCarattereSpecialeVettore {
	// Dati 3 vettori di caratteri conta il numero totale di 'a'
	public static void main(String[] args) {
		char[] v1={'f', 'o', 'r', 'u', 'm'}; 
		char[] v2={'p', 'r', 'o', 'g', 'r', 'r', 'a', 'm','m','a', 't', 't', 'o','r','i'};
		char [] v3= {'j', 'a','v','a'};
		
		System.out.println("Totale occorrenze trovate: " +conta(v1)+conta(v2)+conta(v3));
	}
	public static int conta(char[] v){
		int occorrenzaCarattere=0; 
		for (int i=0; i<v.length; i++)
			if (v[i]=='a') occorrenzaCarattere++;
			System.out.println("Lunghezza matrice: " + v.length);
			System.out.println("Occorrenze trovate " + occorrenzaCarattere);
		return occorrenzaCarattere; 
	} 
}
1. perchè la variabile: occorrenzaCarattere(contenuta nel metodo statico conta), pur non essendo statica si comporta come lo fosse? ... non perde il suo valore.

2.c'è un modo di capire la v a quale vettore si riferisce? ... tipo primo vettore, occorrenze trovate ... secondo vettore ...

GRAZIE!

7 Risposte

  • nelloskybus ha scritto:


    1. perchè la variabile: occorrenzaCarattere(contenuta nel metodo statico conta), pur non essendo statica si comporta come lo fosse? ... non perde il suo valore.
    Non è che "non perde il valore" .... è una variabile locale, terminato il metodo ... sparisce.
    All'inizio è inizializzata a 0 e in base a ciò che viene trovato viene incrementata. E alla fine il valore viene restituito.

    nelloskybus ha scritto:


    2.c'è un modo di capire la v a quale vettore si riferisce? ... tipo primo vettore, occorrenze trovate ... secondo vettore ...
    All'interno di conta? No, non può sapere null'altro dell'array, anche perché quei array sono locali al main.
  • Grazie
  • andbin ha scritto:


    Non è che "non perde il valore" .... è una variabile locale, terminato il metodo ... sparisce.
    All'inizio è inizializzata a 0 e in base a ciò che viene trovato viene incrementata. E alla fine il valore viene restituito.
    quindi il valore rimane nel metodo per le tre chiamate e poi è restituito al Maine che lo invoca?
  • nelloskybus ha scritto:


    quindi il valore rimane nel metodo per le tre chiamate e poi è restituito al Maine che lo invoca?
    No.
    conta viene prima invocato con v1, occorrenzaCarattere vale inizialmente 0, non ci sono occorrenze di 'a', quindi resta 0 e viene restituito perciò 0. Il metodo termina, occorrenzaCarattere non esiste più.

    conta viene poi invocato con v2, occorrenzaCarattere vale inizialmente 0, ci sono 2 occorrenze quindi viene incrementato 2 volte e viene restituito perciò 2. Il metodo termina, occorrenzaCarattere non esiste più.

    ....
  • nelloskybus ha scritto:


    andbin ha scritto:


    Non è che "non perde il valore" .... è una variabile locale, terminato il metodo ... sparisce.
    All'inizio è inizializzata a 0 e in base a ciò che viene trovato viene incrementata. E alla fine il valore viene restituito.
    quindi il valore rimane nel metodo per le tre chiamate e poi è restituito al Maine che lo invoca?
    ma allora come fa il println a sommare il tutto? usa il valore che riceve dal return?
  • nelloskybus ha scritto:


    ma allora come fa il println a sommare il tutto? usa il valore che riceve dal return?
    Tra l'altro nella riga:

    System.out.println("Totale occorrenze trovate: " +conta(v1)+conta(v2)+conta(v3));

    non viene fatta una somma matematica ma una concatenazione della stringa!
  • Grazie ... sto imparando tantissimo
Devi accedere o registrarti per scrivere nel forum
7 risposte