Dove piazzare variabile pubblica

di il
7 risposte

Dove piazzare variabile pubblica

Ciao a tutti ...ancora una volta voglio chiedere il vostro aiuto.

//Eleva  alla potenza indicata ... classe "potenza" è ricorsiva(invoca se stessa)
import java.util.Scanner;

public class Potenza {
	public static int numero; // La dichiaro qui per poterla utilizzare nel metodo potenza
	public static void main(String[] args){ 
		int esponente;
		Scanner scannerCalcolaPotenza = new Scanner(System.in);
		System.out.print("Inserisci l'esponente a cui vuoi elevare il numero: ");
		esponente = scannerCalcolaPotenza.nextInt();
		System.out.print("Inserisci il numero da elevare a potenza di " + esponente + " : ");
		numero = scannerCalcolaPotenza.nextInt();
		System.out.println(potenza(esponente));
		scannerCalcolaPotenza.close();
	} 
	public static int potenza(int p){ 
		if (p==0) return 1; 
		else return numero*potenza(p-1); 
	}
} 
Ho inserito la variabile intera numero nella classe Potenza, altrimenti non potevo vederla all'interno del metodo potenza. E' CORRETTO? HO SBAGLIATO? POTEVO FARE DIVERSAMENTE ... se si come?
Altra domanda è su cosa mi devo documentare per intercettare l'errore? mi servirebbe un try/catch al volo ... ma non so come fare.

GRAZIE!

7 Risposte

  • Re: Dove piazzare variabile pubblica

    Per il try-catch ho risolto così ... per favore ditemi se va bene, se posso migliorare il tutto ... HO COMUNQUE UN ERRORE ... nel secondo inserimento, se digito un carattere non valido e premo invio, im messaggio di errore mi compare 2 volte e non riesco a capire perchè.

    Oltre a tutto questo, rimane la domanda di prima ... se è corretto inserire all'inizio della classe la variabile pubblica numero per poterla utilizzare nel metodo potenza.
    
    //Eleva  alla potenza indicata ... classe "potenza" è ricorsiva(invoca se stessa)
    import java.util.Scanner;
    
    public class Potenza {
    	public static int numero; // La dichiaro qui per poterla utilizzare nel metodo potenza
    	public static void main(String[] args){ 
    		int esponente;
    		Scanner scannerCalcolaPotenza = new Scanner(System.in);
    		
    		System.out.print("Inserisci l'esponente a cui vuoi elevare il numero: ");
    		while (!scannerCalcolaPotenza.hasNextInt()){ // Fino a quando non viene inserito un intero ripete il ciclo di inserimento
    			scannerCalcolaPotenza.nextLine();
    			System.out.println("ERRORE! inserisci di nuovo");
    		}
    		esponente = scannerCalcolaPotenza.nextInt();
    		
    		System.out.print("Inserisci il numero da elevare a potenza di " + esponente + " : ");
    		while (!scannerCalcolaPotenza.hasNextInt()){ // Fino a quando non viene inserito un intero ripete il ciclo di inserimento
    			scannerCalcolaPotenza.nextLine();
    			System.out.println("ERRORE! inserisci di nuovo");
    		}
    		numero = scannerCalcolaPotenza.nextInt();
    		
    		System.out.println(potenza(esponente));
    		scannerCalcolaPotenza.close();
    	} 
    	
    	public static int potenza(int p){ 
    		if (p==0) return 1; 
    		else return numero*potenza(p-1); 
    	}
    } 
    GRAZIE!
  • Re: Dove piazzare variabile pubblica

    Certo che è normale inserire la variabile fuori dai metodi.. altrimenti non potresti utilizzarla in nessuna altra parte del codice.. poi come l'hai dichiarata ... public static ... diventa una variabile di classe... ossia in altre classi puoi invocarla semplicemente con... NomeClasse.nomeVariabileStatica;
  • Re: Dove piazzare variabile pubblica

    miticogilles ha scritto:


    certo che è normale inserire la variabile fuori dai metodi.. altrimenti non potresti utilizzarla in nessuna altra parte del codice.. poi come l'hai dichiarata ... public static ... diventa una variabile di classe... ossia in altre classi puoi invocarla semplicemente con... NomeClasse.nomeVariabileStatica;
    ok grazie
    suggerimenti per impedire un inserimento scorretto? ... o va bene così?
  • Re: Dove piazzare variabile pubblica

    nelloskybus ha scritto:


    suggerimenti per impedire un inserimento scorretto? ... o va bene così?
    Semplicemente devi implementare i metodi getter e setter per qualsiasi variabile... ossia
    Nel costruttore
    
    setVariabile(nomeVariabile);
    
    poi un metodo tipo:
    
    public void setVariabile(Object n)
    {
    this.nomeVariabile = n;
    }
    
    ed infine un metodo getter
    
    public Object getVariabile()
    {
    return this.nomeVariabile;
    }
    
    In questo modo avresti incapsulato i dati.. che è uno dei paradigmi di Java

    Logicamente mettendo i metodi di cui sopra sarebbe buona cosa accedere alle variabili "solo" tramite i metodo getter...
  • Re: Dove piazzare variabile pubblica

    Non credevo servisse sempre incapsulare ... ma ne terrò conto, se è questa la programmazione ad oggetti ... certo ogni cosa diventa complessa, ma è meglio prendere buone abitudini da subito.
    grazie
  • Re: Dove piazzare variabile pubblica

    nelloskybus ha scritto:


    non credevo servisse sempre incapsulare ... ma ne terrò conto, se è questa la programmazione ad oggetti ... certo ogni cosa diventa complessa, ma è meglio prendere buone abitudini da subito.
    grazie
    ma dai non è complessa... si tratta di 2 semplicissimi metodi... puoi anche non farlo... ma a questo punto andresti contro a uno dei paradigmi di Java...
    Pensa solo a questo... se stai facendo un'applicazione (... e non adotti l'incapsulamento)... potrai (anzi, quasi sicuramente ti troverai) a dover rifare intere classi solo perchè non hai messo il metodo set nel quale puoi modificare (senza stravolgere il codice) l'implementazione per quella variabile.. lo so che mi spiego male... del resto anche io non sono un espertissimo.. però le basi ce le ho.. e ti garantisco che servono...
  • Re: Dove piazzare variabile pubblica

    miticogilles ha scritto:


    ma dai non è complessa... si tratta di 2 semplicissimi metodi... puoi anche non farlo... ma a questo punto andresti contro a uno dei paradigmi di Java...
    Pensa solo a questo... se stai facendo un'applicazione (... e non adotti l'incapsulamento)... potrai (anzi, quasi sicuramente ti troverai) a dover rifare intere classi solo perchè non hai messo il metodo set nel quale puoi modificare (senza stravolgere il codice) l'implementazione per quella variabile.. lo so che mi spiego male... del resto anche io non sono un espertissimo.. però le basi ce le ho.. e ti garantisco che servono...
    prenderò questa buona abitudine. Purtroppo programmo in Basic.net è mi rendo conto che anche se è stato fatto molto per rendere Basic un linguaggio ad oggetti, non lo è assolutamente, anzi ne è una bruttissima copia.
    Mi ritrovo a dover imparare tutto da capo, ma la cosa che più mi risulta difficile è la logica ad oggetti.
    BASIC.NET lo sconsiglio a chiunque ... indicato solo a qualche impiegato generico che con poco sforzo deve sostituire un programmatore per un semplice progetto senza grandi pretese.

    GRAZIEEEEE
    ciao

    Continua ad aiutarmi!
Devi accedere o registrarti per scrivere nel forum
7 risposte