Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Alec
    Registrato dal
    Mar 2009
    Messaggi
    18

    Istanziare un metodo dentro un altro metodo...è possibile??

    salve volevo chiedere se è possibile istanziare un metodo a se dentro un altro metodo...

    praticamemte nella classe D ce un metodo f() che crea un array di 100 interi con i valori r.nextInt(400) con r generata da un new Random(come vedete nel codice) e poi dovrebbe ordinarlo in modo crescente, solo che nel diagramma uml i due metodi che utilizzo ordinare l'array (scambio e ordinameto) non sono dichiarati...e secondo l'esercizio non devo aggiungere ne classi ne metodi ne variabili...

    quindi tornando alla domanda è possibile itanziare i due metodi dentro al metodo f()??
    vi posto il codice per farvi capire il problema...questa versione non funziona perchè i 2 metodi sono istanziati dentro al metodo f()...(se invece i metodi li istanzio a parte, sempre dentro la classe D ma a parte, tutto funziona benissimo ma così facendo implemento metodi al diagramma uml...


    codice:
    import java.util.Random;
    abstract class A
    {
    	private int X;
    	public A (int x)
    	{X=x;}
    	public abstract int [] f();
    }
    
    abstract class B extends A
    {
    	private int W;
    	public B (int x, int w)
    	{
    		super (x);
    		W=w;
    	}
    	public float alfa()
    	{
    		float tmp=0;
    		tmp += W + e.getCoeff();
    		return tmp;
    	}
    }
    
    class D extends B
    {
    	public D (int x, int w)
    	{super (x,y);}
    	public int [] f()
    	{
    		int array[] = new int [400];
    		Random r = new Random (22446688);
    		for (int i=0; i<array.length; i++){
    		array[i] = r.nextInt(1000);}
    		
    //questi che seguono sono i metodi di cui vi parlavo sopra
    //se li esco dal metodo f() funzionano perfettamente
    //ma così non compila...come faccio a farli funzionare senza tirarli fuori???
    
    		static void scambio (int a[], int primo, int secondo)
    			{
    				int tmp;      
    				tmp = a[primo];         
    				a[primo] = a[secondo];  
    				a[secondo] = tmp;
    			}
    		static void ordinamento (int array[])
    			{   
    				for ( int pass = 1; pass < array.length; pass++ ) 
    					for ( int i = 0; i < array.length-1; i++ ) 
    					{ 
    						if ( array[i] > array[i+1] )    
    						swap( array, i, i + 1 );
    					}
    			}
    		return array;
    	}
    spero che possiate darmi una mano..thanks
    (ho sistemato il codice così che possiate leggerlo meglio)

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Istanziare un metodo dentro un altro metodo...è possibile??

    Originariamente inviato da Alec
    salve volevo chiedere se è possibile istanziare un metodo a se dentro un altro metodo...
    I metodi non si istanziano .... sono le classi che si istanziano!! I metodi si invocano.

    Originariamente inviato da Alec
    //ma così non compila...come faccio a farli funzionare senza tirarli fuori???
    Ovvio, non compila perché non è ammesso dichiarare metodi dentro metodi!! È possibile dichiarare una classe dentro un'altra classe (le "inner class" e le "nested class") e anche dichiarare una classe dentro un metodo (è un caso particolare di inner class, chiamato "method local inner class").

    Ma metodo dentro un metodo no.

    E perché vorresti avere quei metodi dentro al metodo??? Non ha senso. Quei due metodi hanno utilizzo e scopo solo all'interno di quella classe? Allora mettili allo stesso livello di altri metodi dichiarandoli 'private', così sono accessibili solo dall'interno della classe!!!

    Insomma ... non complicarti la vita .... è un consiglio spassionato!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di Alec
    Registrato dal
    Mar 2009
    Messaggi
    18
    Bhe la mia domanda rispecchia (ovviamente) la tua risposta...è possibile "invocare" un metodo dentro un altro metodo...no...ok

    grazie per la spiegazione dell'inner class mi informerò meglio...

    cmq il problema era che l'esercizio mi imponeva di non aggiungere metodi oltre quelli dichiarati dal diagramma uml quindi ora ti pongo un altro quesito...i metodi private si dichiarano nel diagramma??

    perchè se così fosse il problema non sarebbe risolto e dovrei trovare un altro metodo per ordinare l'array senza usare il bubble sort...

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Alec
    è possibile "invocare" un metodo dentro un altro metodo...no...ok
    Anche qui ti sei espresso probabilmente male .... perché lo si può interpretare così:

    codice:
    void unMetodo() {
        altroMetodo();
    }
    E così (assolutamente lecito) non è forse "invocare un metodo dentro un altro metodo"???

    Originariamente inviato da Alec
    grazie per la spiegazione dell'inner class mi informerò meglio...
    Ma per i metodi che volevi fare .... non ti servono proprio le inner class. Cioè ... non andare a scomodare le inner class solo per definire metodi per ordinare un array.

    Originariamente inviato da Alec
    cmq il problema era che l'esercizio mi imponeva di non aggiungere metodi oltre quelli dichiarati dal diagramma uml quindi ora ti pongo un altro quesito...i metodi private si dichiarano nel diagramma??
    In un class diagram UML i metodi private si possono anche indicare. Con il segno '-', che indica appunto visibilità "private".

    Originariamente inviato da Alec
    perchè se così fosse il problema non sarebbe risolto e dovrei trovare un altro metodo per ordinare l'array senza usare il bubble sort...
    Guarda che se proprio vuoi ordinare quel int array[] che hai dichiarato nel metodo, puoi farlo sempre dentro il metodo e senza invocare altri metodi!!! Per il bubble sort c'è il solito doppio ciclo annidato e confronto di 2 valori con swap, se necessario. Non ci sarebbe bisogno di invocare alcun metodo ... se non ti interessa renderlo "riutilizzabile", ovviamente!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.