RISOLTO [JAVA] Passaggio per riferimento e valore

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

Urubin

Nuovo Utente
Messaggi
15
Reazioni
5
Punteggio
23
Ciao a tutti! Oramai è da un ora che sto cercando di capire come mai questo oggetto (Integer)
che ho passato alla mia funzione non cambia valore anche nel main.

Ringrazio in anticipo tutti per il supporto!

Codice:
    //FUNZIONE CHE CONTA GLI SPAZI PRESENTI IN OGNI STRINGA DELLE 2 SEQUENZE
    public static int contaspazi(String[] array, Integer contaparole)
    {
        int conta=0;
        
        for(int i=0; i<3; i++)
        {   
            if(array[i].charAt(0) >= 'a' && array[i].charAt(0) <= 'z')
                    contaparole++;
        
                for(int j=0; j<array[i].length()-1; j++)   
                {
                    if(array[i].charAt(j) == ' ')
                    {
                        conta++;
                        if(array[i].charAt(j+1) >= 'a' && array[i].charAt(j+1) <= 'z')
                            contaparole++;   

                    }
                }
        }
        return conta;
    }   
    

public static void main(String[] args)
    {
        Integer contaparole = 0;
        String[] a= new String[3];
        String[] a1=new String[3];
        Scanner input = new Scanner(System.in);
    
        //INPUT SEQUENZE
        for(int i=0; i<3; i++)
        {
            System.out.println("inserire la stringa del primo array: ");
            a[i]=input.nextLine();
        }
        
        for(int i=0; i<3; i++)
        {
            System.out.println("inserire la stringa del secondo array: ");
            a1[i]=input.nextLine();
        }

        System.out.println("Gli spazi presenti nelle tre stringhe della PRIMA SEQUENZA sono: " + contaspazi(a, contaparole));
        System.out.println("MAIN: " + contaparole);
        System.out.println("Gli spazi presenti nelle tre stringhe della PRIMA SEQUENZA sono: " + contaspazi(a1, contaparole));
        System.out.println("MAIN: " + contaparole);
    }
 
Il valore non cambia in quanto Integer è immutabile. Le operazioni che fai creano un nuovo oggetto.
 
...e comunque il metodo statico che hai scritto non è invocato nel main: anche se non fosse immutabile senza la chiamata al metodo come diavolo fa a cambiare?
devi mettere un'istruzione simile a
Integer contaparole = new Integer( contaspazi(BLA...BLA) )
 
Il metodo contaspazi lo ho invocato direttamente nel System.out

Volevo solo sapere se appunto ci fosse un altro modo per passare il contaparole al main oltre che al solito return.
So che potrei fare una classe ma risulterebbe troppo lungo. È davvero l’unico modo creare una classe?
 
Il metodo contaspazi lo ho invocato direttamente nel System.out

Volevo solo sapere se appunto ci fosse un altro modo per passare il contaparole al main oltre che al solito return.
So che potrei fare una classe ma risulterebbe troppo lungo. È davvero l’unico modo creare una classe?
Java forza SEMPRE il passaggio dei parametri per valore, MAI per riferimento (ossia scordati i puntatori). Ci sono trucchi per farlo, ma costa MOLTO di meno dichiarare una classe. Credimi, ti salva un sacco di tempo (e di mal di testa). Dimentica le funzioni e il metodo procedurale. Nel tuo caso la classe e' semplicissima, ha due variabile private per memorizzare i conteggi, un metodo per passargli i parametri (metodo che memorizza i valori nei campi interni) e due metodi che espongono tali campi.

Java e' fatto apposta per essere un linguaggio OOP, praticamente per essere usato bene tutto deve essere dichiarato come Classe.
 
Il metodo contaspazi lo ho invocato direttamente nel System.out
Non è la stessa cosa, invocato in quel modo provoca una stampa non un'assegnazione di valore;
Java non è C/C++: come ti ha fatto notare @Andretti60 , il passaggio dei parametri avviene solo per copia, anche se bisogna starci attenti perché se si passa un oggetto, il relativo riferimento non può cambiare, ma il "corpo" dell'oggetto si, eccetto nel caso di oggetti immutabili.
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top